Git Resetを使用して古いChangesetにアクセスした後、歴史の最後のコミットに戻る方法は?

StackOverflow https://stackoverflow.com/questions/2540505

  •  23-09-2019
  •  | 
  •  

質問

私の歴史がそのように進むとします:

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);
.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top