タイトル通り間違って git reset --hard (softではなく)した時にコミット直前の編集内容がまるっと消えて、嫌な汗と罪悪感が流れ出た時に使える方法を自戒の意味も込めてここに記載します。
目的
git reset ---hard でコミット直前まで戻った編集内容をコミット時の編集内容に戻す
コマンド
git reflog -n 4
git reset --hard 【元に戻したいコミットのID(ハッシュ値)】
git log
git checkout 【元に戻したいコミットID(ハッシュ値)】
git rev-parse HEAD
git name-rev 【git rev-parse HEADで取れたコミットID】
git checkout 【git name-revで検索した対応するブランチ名】
コマンドの説明
git reflogはgit logでも表示されない過去のコミット履歴を見ることができます。-nでいくつ表示するかを決定します。
git reset --hard 【元に戻したいコミットのID(ハッシュ値)】でgit reset --hardそのものを reset(無かったことにします)
git loggit reset --hard 【元に戻したいコミットのID(ハッシュ値)】で最初のgit reset --hard HEAD^が無かったことになるので、git reset --hard HEAD^で最初に取り消したコミットを見ることができます。
git checkout 【元に戻したいコミットのID】この作業でコミット時の編集作業が復元されますが、コミットのIDに checkout しているのでこれをブランチを指すようにする必要があります。
git rev-parse HEADこの作業で現在のHEADのコミットIDが取れます
git name-rev 【HEADのコミットID】この作業で現在のHEADのコミットIDに対応したブランチを検索することができます
git checkout 【対応するブランチ名】これで、元のブランチを指すようになります。
※コミットは定期的にとりましょう。
岡崎拓哉
2016年に入社した新卒。ドラムとインコが好きな人。
最近は、デザイン駆動設計や関数型プログラミングに興味あり。
マネジメントも覚えていきたい系エンジニア。