とあるLinuxカーネルを追ってたら,何故か異なるリビジョン間で
mergeができないという問題にあたった.明らかにできそうなのにもかかわらず.
merge時のコンフリクトしている内容を見ると,カーネルの中身なので当然のように
アセンブラで1行挿入されてたりしていて,そんなもん手作業で直せるか…,と思い,
どうしてこの問題が発生するかいろいろと調べていた.
結局この問題,理解するのに1日半ぐらいかかった.
原因は特定できてしまえば単純で,Linuxの新しいバージョンがリリースされるごとに,
関係するリポジトリをmainlineからすべてマージしなおしていた.
また,その依存関係が壊れた状態で(意図的に)--forceオプションを
付けてpushしていたので,履歴がぶった切られていた.
gitの場合,過去が容易に改ざんできてしまううえに,改ざんしたかどうかすら
わからないので厄介なパターンがあるね.
まぁ,こういう使い方もあるんだな,と思って知っていれば何ともないんだろうな.