Git Resetを使用して古いChangesetにアクセスした後、歴史の最後のコミットに戻る方法は?
質問
私の歴史がそのように進むとします:
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
メソッドは、タスクに対するアクセス許可を渡して付与するSPPrincipal
を取ります。
SPRoleDefinition roleDefinition = setSPWeb.RoleDefinitions["Contribute"];
SPRoleAssignment roleAssignment = new SPRoleAssignment(principal);
roleAssignment.RoleDefinitionBindings.Add(roleDefinition);
setListItem.RoleAssignments.Add(roleAssignment);
.