この記事は最終更新日から1年以上が経過しています。
タイトル通り間違って 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 log
git 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年に入社した新卒。ドラムとインコが好きな人。
最近は、デザイン駆動設計や関数型プログラミングに興味あり。
マネジメントも覚えていきたい系エンジニア。
最近書いた記事
- 2018.12.02シリコンバレー1日ツアーに参加してきました(後半)
- 2018.11.29【re:Invent 2018】Day3 -いよいよ本命のKeynote!-
- 2018.11.27【re:Invent 2018】Day1 - re:Inventに参加してきました!!!
- 2018.02.21CloudFormationでAPIGatewayのリソースとメソッドを作成する方法