20

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

A - B - C - D (マスター)

もしそうならgit reset B、私は得ます:

A - B (マスター)

問題は、git logA から B までの履歴だけを表示して、C と D が表示されなくなったことです。

どうすれば D に戻ることができますか?

4

2 に答える 2

31

でDを見ることができるはずですgit reflog

たとえば、この記事を参照してください。

コミットが実際に削除されるのは、git gc --pruneの場合のみです(そのため、注意してください)。

作業中のリポジトリで現在gitreflogを実行すると、次のような多くの変更が表示されます。

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以降を使用している場合)。

于 2010-03-29T19:03:56.990 に答える
1

わかりました、それを見つけました。

を使用できますgit reflog

何のためにあるのかわかりませんでしたが、HEADが指しているすべての参照のログであることがわかります。

于 2010-03-29T19:02:36.217 に答える