67

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

ABC
    ↑
  主人

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

4

2 に答える 2

186

自分に有利に働きgit checkout <hash>、他の答えが示唆するようにしないで、より多くの問題に取り掛かってください。

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

git checkout -f

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

削除されたファイルは再び元に戻るはずです。

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

于 2012-02-28T07:36:09.660 に答える
6

正しく理解できたら、コミットCを書き直しました。元のコミットをC1と呼びましょう。コミットグラフからはアクセスできませんが、まだ存在しています(gitはすべてのコミットをしばらく保持します)。git reflogコミットハッシュgit checkout <hash>または別の適切なコマンドを取得して古い状態C1に到達するために使用します。

于 2012-02-28T07:07:20.290 に答える