433

私はうっかり言っgit rm -r .た。これから回復するにはどうすればよいですか?

私はコミットしませんでした。

すべてのファイルが削除対象としてマークされ、ローカル チェックアウトからも物理的に削除されたと思います。

編集:(コマンドを知っていれば)最後のコミットに戻すことができました。しかし、元に戻すことができれば、はるかに良いでしょうgit rm -r .。最後のコミットの後、git rm -r ..

4

13 に答える 13

518
git reset HEAD

やるべきです。気になるコミットされていない変更がない場合は、

git reset --hard HEAD

すべてを強制的に最後のコミットにリセットする必要があります。コミットされていない変更があるが、最初のコマンドが機能しない場合は、コミットされていない変更を次のように保存しますgit stash

git stash
git reset --hard HEAD
git stash pop
于 2010-01-24T02:56:49.530 に答える
276

私はいくつかのファイルを git-rm し、それらのファイルのいくつかを元に戻す必要があることに気付いたとき、次のコミットの前に変更を加え続けました。隠してリセットするのではなく、必要に応じて、見逃した/削除した個々のファイルを簡単にチェックアウトできます。

git checkout HEAD path/to/file path/to/another_file

これにより、他のコミットされていない変更はそのまま残り、回避策はありません。

于 2012-01-04T23:28:10.057 に答える
66

いくつかの単一のファイルまたはフォルダーを取り戻すには、次を使用できます

git reset -- path/to/file
git checkout -- path/to/file

これにより、最初に のインデックス エントリがpath/to/file再作成され、前回のコミット時と同じようにファイルが再作成されますHEAD

ヒント:コミット ハッシュを両方のコマンドに渡して、古いコミットからファイルを再作成することができます。詳細についてはgit reset --help、 とgit checkout --helpを参照してください。

于 2013-01-19T14:54:06.190 に答える
31

アップデート:

は、作業中のチェックアウトとインデックス内のこのディレクトリと子ディレクトリ内のすべてのファイルを削除するため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その後、キューに入れていたコマンドを繰り返す必要があります。

于 2010-01-24T02:48:39.313 に答える
29

上記のいずれも機能しない場合は、次の提案を使用してデータを取得できる場合があります: http://www.spinics.net/lists/git/msg62499.html

git prune -n
git cat-file -p <blob #>
于 2012-11-28T17:39:23.890 に答える
11

変更をコミットしてプッシュした場合は、これを実行してファイルを元に戻すことができます

// Replace 2 with the # of commits back before the file was deleted.
git checkout HEAD~2 path/to/file
于 2015-01-29T21:49:01.947 に答える
3

リストのコミットを取得

git log  --oneline

たとえば、安定コミットにはハッシュがあります。45ff319c360cd7bd5442c0fbbe14202d20ccdf81

git reset --hard 45ff319c360cd7bd5442c0fbbe14202d20ccdf81
git push -ff origin master
于 2016-09-30T13:37:48.813 に答える
2

私も同じ状況でした。私の場合、解決策は次のとおりです。

git checkout -- .
于 2014-08-14T11:11:47.967 に答える