私は非常に愚かなものを作りました。 git commit(ファイル編集+新しいファイル)を使用してコミットしました(C)。次に、最後のコミットを修正しました。次に、git rm -r
を使用してすべてのファイルを再帰的に削除しました(!)。次に、別のgitコミットを作成しました(C)。
A-B-C ↑ master
ファイルを削除せずに、最初のコミットで行った変更を保持する方法はありますか? (C)(B)には戻りたくない。 git reset --soft head ^を試してみたので、git statusに削除したファイルがリストされ、その後git checkoutを実行しましたが、まだ運がありません。それが可能かどうかさえ知りません。
他の答えが示唆するようなgit checkout <hash>
をしないでください。
作業ディレクトリからファイルを削除し、まだ変更をコミットしていない場合は、次を実行します。
git checkout -f
注意:このコマンドを実行する前に、コミットされていないファイルをコミットします。そうしないと、すべてのファイルが失われます
削除されたファイルは再び戻ってくるはずです。
そうでない場合、およびgit reflog
から目的のコミット(Cなど-あなたの質問は明確ではありません)を見つけることができる場合は、git reset --hard <hash from reflog>
を実行するだけで設定は完了です。
私があなたを正しく理解していれば、コミットCを書き直しました。したがって、元のコミットは、C1をコミットグラフからアクセスできないようにします。つかいます git reflog
コミットハッシュとgit checkout <hash>
または別の適切なコマンドを使用して、古い状態C1に移行します。