在我使用git重置进行旧更改之后,如何回到历史上的最后一个提交?
题
假设我的历史走了:
a -b -c -d(主)
如果我做 git reset B
, ,我得到:
A -B(主)
麻烦是, git log
现在只向我展示从A到B的历史,我再也看不到C和D了。
我该如何回到D?
解决方案
您应该能够看到D git reflog
.
看到这个 例如文章.
实际上唯一删除的时间是如果您git gc -prune(请小心那个!)。
如果您现在在您一直在工作的存储库中运行Git Reflog,您会看到许多看起来像这样的更改:
c5c3a82... HEAD@{0}: pull origin featureB: Merge made by recursive.
49d0608... HEAD@{1}: reset --hard HEAD^: updating HEAD
3ed01b1... HEAD@{2}: pull origin featureA: Merge made by recursive.
49d0608... HEAD@{3}: pull origin bugfixJ: Merge made by recursive.
854d44e... HEAD@{4}: commit: Add more cowbell to foo.c
6dbc22d... HEAD@{5}: pull origin bugfixI: Merge made by recursive.
9bdb763... HEAD@{6}: commit: Remove weevils
8518f9d... HEAD@{7}: checkout: moving from wickedfeature to master
这些线可以分为4个部分:
- 提交哈希,
- 提交指针,
- 行动,
- 和额外的信息。
如果我们想恢复丢失的承诺
HEAD@{1}
, ,我们可以git reset --hard HEAD@{2}
.
现在,我们当前的分支(和工作副本)已设置为存储库状态,然后再进行重置。如果我们想看看这种状态是什么,我们可以
git checkout -b temp HEAD@{2}
(或者git checkout HEAD@{2}
如果您有Git 1.5.0及以上)。
其他提示
这是一个我在时间和时间再次进行的问题。SpecialPermissions
活动的CreateTask
属性似乎没有更新已现有任务的权限。
在理论上,您应该能够设置OnTaskChanged
事件以根据该方法检测任务项的重新分配和权限。我的iffy结果也这样做。
我已经解决了所有工作流的解决方案已经在工作流使用的任务列表中实现了一个生成的ItemUpdated
事件接收器。在此事件接收器中,只要更新项目,您就可以检查“已分配为”是否已更改,并适当地重新启动。
编辑:这是我使用的代码的剪辑。在我的情况下,重新分配可以是一个组或特定用户,所以我处理两个情况。
// Compare the new string value of the 'Assigned To' field on the task to the old value
// in the event afterproperties. If they differ, this task has been reassigned.
if (!GenericUtilities.StringValueFromField(listItem["Assigned To"]).Equals(properties.AfterProperties["AssignedTo"]))
{
// Break role inheritance if not already done
if (!listItem.HasUniqueRoleAssignments)
{
// Reset inheritance first, to wipe out any other permissions
listItem.ResetRoleInheritance();
listItem.BreakRoleInheritance(false);
}
// Determine if the assigned user is a group or user, and assign permissions as necessary
SPFieldUserValue field = new SPFieldUserValue(listItem.Web, GenericUtilities.StringValueFromField(listItem["Assigned To"]));
if (field.User != null)
{
SetItemLevelPermissions(listItem.Web, listItem, field.User);
}
else
{
SPGroup assignedGroup = listItem.Web.SiteGroups[field.LookupValue];
SetItemLevelPermissions(listItem.Web, listItem, assignedGroup);
}
}
.
SetItemLevelPermissions
方法只需拍摄我通过和授予任务的权限:
SPRoleDefinition roleDefinition = setSPWeb.RoleDefinitions["Contribute"];
SPRoleAssignment roleAssignment = new SPRoleAssignment(principal);
roleAssignment.RoleDefinitionBindings.Add(roleDefinition);
setListItem.RoleAssignments.Add(roleAssignment);
.