6

背景: Trevor は、git を試すためだけにテスト プロジェクトに取り組んでいました。これは共有されていないローカルの 1 人用リポジトリであるため、不要なコミットを削除するために Trevor がハード リセットを行いました。

    :git reset --hard 6aa32cfecf4
    HEAD is now at 6aa32cf auto commit Sun Feb 28 16:00:10 -0800 2010

その後、Trevor は喜んで新しいコミットをプロジェクトに追加しました。次に、Trevor がコミット履歴のグラフィカル表現を調べたところ、Trevor は、抹消されたコミットの匿名ブランチがあるように見えることを発見しました。git branch を使用したブランチとしては表示されませんが、GUI には表示されます。

質問1: Trevorはこの「匿名のブランチ」をどのように取り除くことができますか...そしてTrevorは本当に何を見ていますか?Trevorがハードリセットを行ったときにTrevorが何が起こったのかを理解するのに役立ついくつかのポインターは何ですか。

質問 2: Trevorプロジェクトを他の人と共有したと仮定します。ハードリセットを行わずに同じ (または同様のこと) を行う代替手段は何ですか?

4

2 に答える 2

4

Git を使用して失われたコミットを回復するためのイラスト付きガイドで述べたように、「失われた」コミット (「ブランチまたはタグによって参照されなくなった」など) を回復できます。
そのため、それらはまだ gitk に表示されます。
たとえば、

$ git fsck −−lost-found

もそれらを表示します。

これをクリーンアップするには (他の削除操作から戻るものがないと仮定します)

 $ git gc --aggressive
 $ git prune

git gc: clean up after yourselfも参照してください。


そのブランチが共有されていた場合、可能な代替手段はgit revert、新しいコミットで以前の n 個のコミットをキャンセルすることでした。

于 2010-03-05T05:15:38.470 に答える
3

コミットによっていくつかの新しいブランチを作成できます。

匿名ブランチでの最後のコミットが 123e43 の場合、次のことができます。

git checkout -b my_branch 123e43e

これで、ブランチは非匿名になりました。マスターブランチでマージまたはリベースできます

于 2010-03-05T07:59:24.343 に答える