git pullでいじったおぼえのないファイルがconflictした話

gitは可能な選択肢が多すぎて自分の解決が正しい方法かどうか分からない。なんだかんだで問題が起きた時に解決することはできてはいるんだが、正しいかどうかわからないのでここに書いておこう。

Aさんが僕のmasterをcloneして、github上でゴリゴリ作業をしている。僕はその変更を取り入れたいが、ただズラズラと並ぶと後で困るんじゃないかと思ったのでgit flowでfeatureブランチを作って、マイルストーン1の変更が終わった時点でgit pullしてgit flow feature finish、マイルストーン2の変更が終わった時点でgit pullしてgit flow feature finish、というようにマイルストーンごとに分けていた。

ところが、マイルストーン3のpullの時点で自動マージに失敗した。僕が手元で編集したREADME.rstが衝突するだけならまだしも、変更していないファイルまで大量にコンフリクトが起きている。これはなぜか?

このコンフリクトを人間が手で直さなきゃいけない理由はないので、とりあえずresetしてなかったことにし、それからFETCH_HEADをcheckoutした。これはブランチではないらしいのでcheckout -b tmpとかやってブランチを作っておく。で、rebase develop。

案の定README.rstのコンフリクトでrebaseが止まる。これは当たり前なので手でコンフリクトを修正する。でgit addしてgit rebase --continueする。すんなり最後までrebaseされた。改めてマイルストーン3用のフィーチャーブランチをcheckoutしてそこでgit merge tmp。今度はfast-forwardなのですんなりいった。めでたしめでたし。