git resetのリセット

あまり頭を使わずに

$git reset --hard commitID

とかやると例えば、コミットをプッシュするリモートを間違えちゃったからプッシュ先だけ変えなきゃ、

というときにコミットそのものをなくしてしまうという愚かしい行為に及んでしまうことがあります。

こんな愚かな行為もやり直しのチャンスを与えてくれる優しさがGitにはあります。

取り消したコミットまで覚えてくれているのです。

$git reflog

で消え去ったコミットも含めたログを出します。こんな感じ

01eb023 HEAD@{0}: reset: moving to HEAD^^
ba3a1ac HEAD@{1}: commit: hogehoge3
ba3a1ac HEAD@{2}: commit: hogehoge2
ba3a1ac HEAD@{3}: commit: hogehoge1
01eb023 HEAD@{4}: checkout: moving from master to features/hogehoge
...

hogehoge3のコミットに戻しましょう

$git reset --hard "HEAD@{1}"

戻すときもresetです。引数のとり方に注意が必要です。

あらためてGitの凄さを痛感しました。。