誤ったgit reset からの復活の呪文

誤って必要なコミットをgit resetして、復活させるのに半日かかったよ...

と、同僚の方が困っていたのでgitの機能でどうにかできないか調べた。

解決方法

Git初心者が絶対に覚えておくべきコマンド - idesaku blog

を参考に、実際に手元で試してみた。

rasuyuk % git reflog
bae77f9 HEAD@{0}: HEAD~: updating HEAD
13291ee HEAD@{1}: commit: fuga
bae77f9 HEAD@{2}: commit: hoge
71adff6 HEAD@{3}: commit (initial): init

とすると、過去のコミット履歴情報が出てきたので、

rasuyuk % git reset --hard HEAD@{1} (または 13291eeでも可)

とすればfuga(HEAD)の歴史に戻ることができた。



ちなみに、試したがうまく行かなかった方法についても書いておく。

1. git checkout (hash)

fugaのハッシュタグが残っていたので試したが、
'detached HEAD' state ... というエラーが出て、no branch状態になってしまった。


2. git reflog & git diff (hash) | patch -p1 -R

間違えて git reset --hard HEAD^ しちゃったら - はちゅにっき
こちらの方法ですが、復活したあとに再びcommitしなければいけない点があったのでスマートでないかなと。