Just do IT

思うは招く

git rebase を取り消す

rebase 周りでミスってしまったので、解決方法をメモする。

事の顛末

  • ref-books から派生した amazon-api ブランチをつくった
  • PRを出すときに master を rebase してしまった ← ミスった😇
  • 本来は ref-books を rebase して push すべき

解決

reflogはその名のとおり、ログを参照できるコマンド。コミットだけではなく、rebase など今までの行動を調べることができる。

今回の場合、引数に amazon-api を指定して、rebase した以前のログを見る。

$ git reflog amazon-api

425b1140 (HEAD -> amazon-api) amazon-api@{0}: reset: moving to amazon-api@{8}
304d0d44 (origin/amazon-api) amazon-api@{1}: reset: moving to amazon-api@{2}
c750fa7b amazon-api@{2}: commit: 不要なファイルを削除
b01ed09c amazon-api@{3}: rebase finished: refs/heads/amazon-api onto 7a50a3ba6ea576b303c694e7b71642c162cec080
304d0d44 (origin/amazon-api) amazon-api@{4}: commit: システムテストを修正
9f7f0aa1 amazon-api@{5}: reset: moving to 9f7f0aa
bd138ba0 amazon-api@{6}: commit: スタブを使用
9f7f0aa1 amazon-api@{7}: commit: スタブを共通化
#ここがmasterをrebaseしたところ
9c926e8c amazon-api@{8}: rebase finished: refs/heads/amazon-api onto 7109564960f2521352ca59ca5d8f768408d5b299
#ここまで戻したい
425b1140 (HEAD -> amazon-api) amazon-api@{9}: commit: システムテスト修正

amazon-api@{9}まで戻ればいいということがわかった。

次に、git reset --hardで引数に渡した部分まで戻る。

$ git reset --hard amazon-api@{9}

本来はどうすればよかったか

そもそも、git rebase masterをする必要はなかった。master から派生したブランチではないので。

ではどうすればよかったか。

#ref-booksの最新情報をもってくる
git checkout ref-books
git pull origin ref-books

#ref-booksをrebaseする
git checkout amazon-api
git rebase ref-books
(コンフリクトしてたら直す)
git push origin amazon-api --force-with-lease