2013-03-18 8 views
5

コミットされていないファイルの作業ディレクトリをクリアしたかったのですが、誤ってgit reset --hardを実行しました。リセット後にGitコミットが失われました。 fsckではなく、reflogにありません

私は前回の(コミットされていない)コミットを失ったので、git reset --hard ORIG_HEADを実行しました。これは私の失われたコミットに私を得ることはありませんでした。

私はgit reflogを実行しましたが、そこにコミットがリストされていませんでした。私もgit fsck --lost-foundを実行しましたが、リストにはコミットがなく、無関係な小塊や樹木はわずかでした。

関連するコミットメッセージと変更の一覧が残っている.git/COMMIT_EDITMSGを除いて、失われたコミットの参照を見つけることができないため、コミットを回復する方法についてはわかりません。

失われたコミットを取り戻す方法はありますか?あるいは、全員のために準備する必要がありますか?

+0

なぜあなたはあなたのローカル変更のためにgitコミットしたと思いますか? git resetはそれを失いませんでした。コミットされていない変更だけがあった場合、それらはなくなっています。 – fche

+3

'git reset -hard'はcommit-ish引数を持たず、' git reset -hard HEAD'と同等です。コミットを失ったり、プッシュしたり、プッシュしたりすることはありません。インデックスと作業ディレクトリを最後にコミットした状態に戻し、ステージングされた(unstaged)(まだコミットされていない)変更は失われます。 'git reset -hard ORIG_HEAD'は、ORIG_HEADを実際に更新した最後のコマンドと、それがどれぐらい前のもので、何の間に行ったのかによって、問題になる可能性があります... – twalberg

+0

ありがとう、失われたコミットは 'git reset -hard'の約30分前に行われました。 –

答えて

9

@ 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

+1

ありがとうRob。私は質問を投稿する前にgitログを検索しましたが、最後のリンク["git reset -hardを元に戻す"](http://stackoverflow.com/a/7376959/845716)がすべてのオブジェクトを調べました!なぜ私がコミットを見つけることができないのか分かりません。私は個々のファイルを見つけることができます。 –

関連する問題