git rebaseの仕組み

Author:

思うところあってgit branchの再構築をしようとしたのだけど、なぜかrebaseするたびにconflictする。
そもそもrebaseがconflictってどういうことだ?
と思っていたのだけどようやく分かってきた。

そもそもgit rebaseはどういうものかというと、対象のハッシュまでチェックアウトして、
順次コミットをチェリーピックしていくようなもの。
editにした場合コミットを修正することができるし、squashにした場合複数のコミットをまとめられる。

で、どうしてconflictが発生するかというと、複数のブランチをくっつけた場合。
fast-forwardじゃなくて並行に開発したりした場合、時系列でチェリーピックしてちゃそりゃconflictしますわな。
対話型だと自動的にコミットがずらりと並ぶからねえ。
これ、逐一並べ替えればうまくいくのかな。

ま、個人でやっているなら気軽にforce commitできるけど
チームでやってたら簡単にforce commitできない都合rebaseもそうやらないでしょ。
pushしてない場合にしかrebaseできなくなりますし。

ただ仕組みを分かっておくとどこかで役に立つかもしれないですね。

Facebook にシェア
Pocket