どせいたんさき。

ナスダヨー

git rebase で失敗したメモとそこから復帰するまで

問題

git rebase に失敗した.具体的な失敗内容は以下の通り.

A---B---C---D:master
 \
  E---F:feature

上記のようなブランチを切っていて featuremasterrebase して以下のようなブランチにしたかった.

A---B---C---D:master
         \
          E---F:feature

ところが FD と conflict してしまった.落ち着いて競合部分を修正すればよかったのだけど,コマンドの意味を取り違えて git rebase --skip*1 を実行してしまった結果以下のような状態になった.

A---B---C---D:master
         \
          E:feature

何とかして一番初めの状態に戻したい.

解決方法

git reflog を使う.reflog を使うと最近の操作とそれに対応する状態のリストが出力される.まずは rebase をおこなう前の状態をこのリストから探す(例えば HEAD@{11}).そして feature ブランチにおいて

git reset --hard HEAD@{11}

と実行することで feature ブランチの時間を巻き戻せる.

*1:Restart the rebasing process by skipping the current patch. URL