思うところあってgit branchの再構築をしようとしたのだけど、なぜかrebaseするたびにconflictする。
そもそもrebaseがconflictってどういうことだ?
と思っていたのだけどようやく分かってきた。
そもそもgit rebaseはどういうものかというと、対象のハッシュまでチェックアウトして、
順次コミットをチェリーピックしていくようなもの。
editにした場合コミットを修正することができるし、squashにした場合複数のコミットをまとめられる。
一般的に歴史改変とか、黒歴史を削除とかしたいときに使うコマンドです。
特にローカルだとコミットにもう一つ混ぜたい、とかしたいときはよく使う。
WIPでコミットした時とか。
で、どうしてconflictが発生するかというと、複数のブランチをくっつけた場合。
fast-forwardじゃなくて並行に開発したりした場合、時系列でチェリーピックしてちゃそりゃconflictしますわな。
対話型だと自動的にコミットがずらりと並ぶからねえ。
これ、逐一並べ替えればうまくいくのかな。
ま、個人でやっているなら気軽にforce commitできるけど
チームでやってたら簡単にforce commitできない都合rebaseもそうやらないでしょ。
pushしてない場合にしかrebaseできなくなりますし。
ただ仕組みを分かっておくとどこかで役に立つかもしれないですね。