@kyanny's blog

創造性は記憶によるところが大きい - 黒澤明

日記。

今日はリリース作業があって(あとでかく)かなり古いブランチからマージしたのでけっこうコンフリクトして、それは想定してたし苦労せず解決できたのだけど、 git svn dcommit するときにもコンフリクトしてこれの解決に手間取ってしまった。

二回目?のコンフリクトがなぜ起こったのか正しく理解できてなくてどうもしっくりこないし、次にまた同じ目にあうのかと思うと不安なので、ちゃんと理由を把握して次は同じ目にあわないようにしたい。現時点では以下のようなことが起こったのかなと考えている。

  • git svn dcommit すると git rebase でコミットの歴史を直列にしようとする
  • Subversion は直列な歴史しか受け入れないのでそれに合わせる必要があるため
  • git rebase するとブランチ側で発生した各コミットが個別に master へ適用される (patch というか cherry-pick というかそんな挙動)
  • コミットの再適用はブランチが分岐した親コミットまでさかのぼってそれ以降のものに対しておこる
  • すでにマージ後でコンフリクト解決済みのワーキングコピーのファイルに対して、過去にコンフリクトをおこした変更が適用されるので、また同じような箇所でコンフリクトする(しかし全く同じではなくて微妙に違ったりする)