git rebaseの例


git rebaseは難しいねーっていう話をたまにするので、実際の例を書いてみる。コンフリクトしたので自明ではない例だと思ったけど、そうでもないかも。

rebaseの手順

.scssファイルを編集したPRがあって、いつのまにかマージできなくなっていたのでgit rebase masterしたらうまくいかなかった。

こんな感じにコンフリクトした。

見るからに両方とも残して良さそうだけど、念のためdiffを確認する。

このコミットはmargin-rightの指定を追加する物なので、HEADに入っていたimgの指定と両方残すのが正しい。

この状態にして--continueする。すると、またマージに失敗する。

念のためdiffを確認してみよう。

このコミットではmargin-rightmarginで書き換えているので、margin-rightを消せば良い。

さらに--continueすると、もう一回似たような感じでコンフリクトする。

これもmargin17pxにするほうを残す。

最終的に、最初のdiffと違い見比べて、imgが増えただけでmarginの指定が同じになっていることを確認する。

まとめ

  • 衝突した部分を見比べるだけで変更が推測できるので、これは簡単な例だった
  • marginを何度も編集している部分を一つにまとめたい (git rebase -i)
  • 何度も同じことを繰り返した気がするけど、もしかしてgit-rerereすると幸せになれる?

git rebase難しい問題

git push -fするまではいくらでもやり直しができるので、上手くいくまで3回くらいやってみれば良いと思った。あと、他人のPRをrebaseすると、自分で書いたものと違って最終形態が自明でないので、むしろ何をすれば良いかわかりやすいかもしれない(壊れたときに取り返しがつかないかもだけど)。