Gitあるある git reset –hard でやらかした話

はじめまして、沖縄チームのキリです。今回はGitあるあるですが、先日やらかしてしまったことを備忘録がてら記事にします。

git reset –hardで一日の作業すべてを吹き飛ばす

やらかした内容は見出しのとおりです。git reset –hardは作業ディレクトリの変更も全てリセットしてしまうコマンドです。未追跡の新規ファイルに関しては消去されることはありませんが、前日にファイルだけ用意してコミット済みだったため一日の作業が全て吹き飛んでしまいました。

gitには作業内容をコミットするまでにworking tree、indexという段階がありますがそのあたりは以下の記事が参考になるかと思います。

GitのWorking TreeとIndexが分かる記事 – Qiita
https://qiita.com/sparklingbaby/items/e749249d366c7487bbbf

結論から言うとVSCodeで作業中、編集したファイルを開いたままにしていたためCtrl+Zで作業内容を元に戻すことができました。

なぜgit resetしたのか

コミットの内容に漏れがあったため、git commit –amendで直前のコミットをやり直しました。しかし本来変更を含めたいコミットは前々回のコミットでした。

どうすればよかったか

今回のケースでは作業内容はそのままにコミットをやり直したかったのでgit reset –softまたはgit reset –mixedを使用するべきでした。また、一度コミットした内容はgit reset –hardでリセットしてもgit reflogから参照することが可能なので一旦コミットしておくと安心です。3種類あるgit resetについては以下の記事がわかりやすく説明されています。

一日の作業をその日の終わりに整理するスタイルの運用を行いがちですが、今後同じ失敗で焦ることがないようこまめにコミットする、コマンドを実行前に作業内容を退避させておき何が起こるか改めて確認するよう心がけたいと思いました。