現在のbranchの先頭、インデックス、作業ツリーを全部リセットするコマンド
git reset --hard HEAD
経緯
コマンドはもうタイトルに書いてしまっているので、怖い話でも書きます。
ある晩、夜桜は恐ろしいミスを犯してしまいました。彼は魔法のような開発ツール、Xcodeを使っていましたが、あるプロジェクトにファイルを追加しようとしたとき、彼は手を滑らせてしまったのです。なんと、その追加すべきはずのファイルではなく、プロジェクト自体を内包するフォルダを追加してしまったのです。
そして、恐ろしいことに、そのフォルダ内にはさらに同じプロジェクトが入っており、その中にまた同じフォルダが存在していたのです。恐ろしい再起構造が幾重にも形成されていました。
夜桜は慌ててその誤って追加したフォルダをプロジェクトから削除しようとしました。ゴミ箱に移動させると、とんでもないことが起こりました。なぜか、プロジェクト自体のファイルまでもが次々とゴミ箱に入ってしまうのです。
(絶望)
幸いなことに、夜桜はまだコミットしていなかったので、Gitの魔法を使うことにしました。彼は恐る恐る「git reflog」という魔法のコマンドを唱え、Gitの操作履歴を確認しました。そして、大切なものを見つけました。それは「HEAD」という名の魔法のポイントでした。夜桜はホッと一息つきました。彼は短期間でたくさんのコミットを行っていたため、失われたプロジェクトを戻すことができるのです。
夜桜はすぐさま「git checkout HEAD .」という魔法のコマンドを試しました。すると、Git上の操作は取り消され、彼は一番最後のコミットの状態に戻りました。しかし、なんということでしょう。作業ツリー、つまり実際のファイルやディレクトリの配置は元に戻りませんでした。消えてしまったファイルは戻ってこなかったのです。
参考:https://www-creators.com/archives/1290
夜桜は絶望しましたが、あきらめることはありませんでした。彼は再び魔法の記事を参考にしました。今度は「git reset --hard」という最強の魔法を試すことにしました。そして、奇跡が起こりました。失われたファイルが無事に復元されたのです。
モード指定 | 動作 |
---|---|
git reset --soft | 現在のbranchの先頭だけをリセット。(インデックスはそのまま) |
git reset | |
(git reset --mixed) | 現在のbranchの先頭と、インデックスをリセット |
git reset --hard | 現在のbranchの先頭、インデックスも作業ツリーも全部リセット |
引用:https://www-creators.com/archives/1282#git_add-2
しかし、まだ夜桜の試練は終わりませんでした。そのフォルダには他の大切なファイルも含まれており、それらもGitで管理されていたのです。夜桜はこれからもがんばって戻すことを決意しました。彼の戦いはまだ続いていくのでした。
本物語はChatGPT先生に書いてもらいました。夜桜って誰だよ。