私はうっかり言っgit rm -r .
た。これから回復するにはどうすればよいですか?
私はコミットしませんでした。
すべてのファイルが削除対象としてマークされ、ローカル チェックアウトからも物理的に削除されたと思います。
編集:(コマンドを知っていれば)最後のコミットに戻すことができました。しかし、元に戻すことができれば、はるかに良いでしょうgit rm -r .
。最後のコミットの後、git rm -r .
.
git reset HEAD
やるべきです。気になるコミットされていない変更がない場合は、
git reset --hard HEAD
すべてを強制的に最後のコミットにリセットする必要があります。コミットされていない変更があるが、最初のコマンドが機能しない場合は、コミットされていない変更を次のように保存しますgit stash
。
git stash
git reset --hard HEAD
git stash pop
私はいくつかのファイルを git-rm し、それらのファイルのいくつかを元に戻す必要があることに気付いたとき、次のコミットの前に変更を加え続けました。隠してリセットするのではなく、必要に応じて、見逃した/削除した個々のファイルを簡単にチェックアウトできます。
git checkout HEAD path/to/file path/to/another_file
これにより、他のコミットされていない変更はそのまま残り、回避策はありません。
いくつかの単一のファイルまたはフォルダーを取り戻すには、次を使用できます
git reset -- path/to/file
git checkout -- path/to/file
これにより、最初に のインデックス エントリがpath/to/file
再作成され、前回のコミット時と同じようにファイルが再作成されますHEAD
。
ヒント:コミット ハッシュを両方のコマンドに渡して、古いコミットからファイルを再作成することができます。詳細についてはgit reset --help
、 とgit checkout --help
を参照してください。
アップデート:
は、作業中のチェックアウトとインデックス内のこのディレクトリと子ディレクトリ内のすべてのファイルを削除するためgit rm .
、これらの変更をそれぞれ元に戻す必要があります。
git reset HEAD . # This undoes the index changes
git checkout . # This checks out files in this and child directories from the HEAD
これはあなたが望むことをするはずです。チェックアウトされたコードまたはインデックスの親フォルダーには影響しません。
そうではなかった古い答え:
reset HEAD
トリックを実行し、ファイルに加えたコミットされていない変更を消去しません。
git add
その後、キューに入れていたコマンドを繰り返す必要があります。
上記のいずれも機能しない場合は、次の提案を使用してデータを取得できる場合があります: http://www.spinics.net/lists/git/msg62499.html
git prune -n
git cat-file -p <blob #>
変更をコミットしてプッシュした場合は、これを実行してファイルを元に戻すことができます
// Replace 2 with the # of commits back before the file was deleted.
git checkout HEAD~2 path/to/file
リストのコミットを取得
git log --oneline
たとえば、安定コミットにはハッシュがあります。45ff319c360cd7bd5442c0fbbe14202d20ccdf81
git reset --hard 45ff319c360cd7bd5442c0fbbe14202d20ccdf81
git push -ff origin master
私も同じ状況でした。私の場合、解決策は次のとおりです。
git checkout -- .