web-dev-qa-db-ja.com

GITで削除を元に戻す

私は非常に愚かなものを作りました。 git commit(ファイル編集+新しいファイル)を使用してコミットしました(C)。次に、最後のコミットを修正しました。次に、git rm -rを使用してすべてのファイルを再帰的に削除しました(!)。次に、別のgitコミットを作成しました(C)。

 A-B-C 
↑
 master 

ファイルを削除せずに、最初のコミットで行った変更を保持する方法はありますか? (C)(B)には戻りたくない。 git reset --soft head ^を試してみたので、git statusに削除したファイルがリストされ、その後git checkoutを実行しましたが、まだ運がありません。それが可能かどうかさえ知りません。

55
Nately

他の答えが示唆するようなgit checkout <hash>をしないでください。

作業ディレクトリからファイルを削除し、まだ変更をコミットしていない場合は、次を実行します。

git checkout -f

注意:このコマンドを実行する前に、コミットされていないファイルをコミットします。そうしないと、すべてのファイルが失われます

削除されたファイルは再び戻ってくるはずです。

そうでない場合、およびgit reflogから目的のコミット(Cなど-あなたの質問は明確ではありません)を見つけることができる場合は、git reset --hard <hash from reflog>を実行するだけで設定は完了です。

167
manojlds

私があなたを正しく理解していれば、コミットCを書き直しました。したがって、元のコミットは、C1をコミットグラフからアクセスできないようにします。つかいます git reflogコミットハッシュとgit checkout <hash>または別の適切なコマンドを使用して、古い状態C1に移行します。

6
Sascha