git rebase しくじった時。
私はよくしくじる!
git reflog を使う
git reflog
で直近の変更がずら〜っと表示されるので、戻したい位置を選んでもとに戻すことができる
$ git reflog 94677f475 (HEAD) HEAD@{0}: rebase (continue) (finish): XXXXX 94677f475 HEAD@{1}: rebase (continue): XXXXXXX 6cd481228 HEAD@{2}: rebase (continue): XXXXXXX b43e2b915 HEAD@{3}: rebase (start): XXXXXXX cb0a55a4e HEAD@{4}: checkout: moving from XXXXX // <- rebase 開始前のココ戻りたい …
戻りたい位置の HEAD@{n}
を指定して --hard reset
で履歴を戻すことができる
今回の場合は rebase 開始前の HEAD@{4}
に戻したいので
$ git reset --hard HEAD@{4}
これで rebase 前の状態まで戻ることが出来ました!⸜(๑’ᵕ’๑)⸝
--hard reset
した時も git reflog
から戻すことができる。
ただし、 git gc
してしまうと reflog
でみれるログが消えてしまって戻せなくなるっぽいので注意。
おわり
[参考]
- Git - git-reflog Documentation
- git reflog | Atlassian Git Tutorial
- 第7話 間違えて reset しちゃった?git reflogで元どおり【連載】マンガでわかるGit ~コマンド編~ - itstaffing エンジニアスタイル
- git rebase を undo したい | deadwood
- いざという時のためのgit reflog - Qiita
- `git reflog` についてまとめてみる · GitHub