6

いくつかのコミットされていないファイルの作業ディレクトリをクリアしたかったのですが、誤って実行されましgit reset --hardた。

以前の(プッシュされていない)コミットを失ったことに気付いたので、実行しましgit reset --hard ORIG_HEADた。これは私の失われたコミットに私を連れて行かなかった。

実行git reflogしましたが、コミットがそこにリストされていませんでした。私も実行しgit fsck --lost-foundましたが、リストにコミットはなく、無関係なブロブとツリーがいくつかありました。

失われたコミットの参照が見つからないため(.git/COMMIT_EDITMSG関連するコミットメッセージと変更のリストがまだあるものを除いて)、コミットを回復する方法がわかりません。

失われたコミットを取り戻す方法はありますか、それとも一晩中準備をする必要がありますか?

4

1 に答える 1

10

@twalbergのコメントgit reset --hardが正しいため、コミットが見つからない理由がわかりません。ただし、ここで試してみることがいくつかあります。

探しているコミットのメッセージがあります(.git/COMMIT_EDITMSG)。書かれている場合、その特定のコミットはどこかCOMMIT_EDITMSGにあるはずです。メッセージからかなりユニークなテキストをいくつか選び、これを試してください。

git log -g --grep="<something specific from your commit message>"

reflogを調べて、失われたコミットのメッセージのテキストに一致するコミットを見つけます。

それがうまくいかない場合は、すべてのブランチのすべてのコミットを調べてみることができます。

git log --all --grep="<something specific from your commit message>"

コミットハッシュを見つけたら、それをチェックアウトしたり、新しいブランチを作成したり、現在のブランチにマージしたりすることができます。

ただし、それがすべて失敗した場合は、リポジトリ内にあるがコミットの一部ではない(たとえば、インデックスに追加されているがコミットされていない)オブジェクトを調べてみることができます。この回答は次のことに役立ちます。

https://stackoverflow.com/a/7376959/845716

于 2013-03-18T16:49:44.387 に答える