Git ветвь переадресации с объединенными детьми

Сегодня я столкнулся с одной проблемой. Мой товарищ по команде создал филиал от мастера. Он разработал одну особенность в этой ветке, а затем разработал две субэлементы в субфехальных ветвях. Наконец, он сделал два рефакторинга. Так что...

     C--D    E--F             | subfeatures
    /    \  /    \
   B------M1------M2--G--H    | feature
  /
 A-------------------K        | master

Обычно мы перестраиваем ветки функций перед тем, как без переадресации слияние в master. Но, конечно, эта перебаза не удалась. Отложенная ветвь функции выглядела так:

     B'--C'--D'--E'--F'--G'--H'
    /
A--K

Конечно, указатели на C и D стали неправильными, поэтому я также получаю две субфедеральные ветки, растущие "из воздуха". Я понимаю, как это исправить, если субфефейные ветки не были объединены в функцию, но в это время я был в замешательстве. Я вишневый взял все в восстановленной ветки восстановления и снова слил все. Это более простой способ сделать это?

Ответ 1

Обратите внимание, что для правильной работы вам необходимо git1.7.6 + для git rebase --preserve-merges.

Короче говоря: вы только что закончили слияние, и кто-то нажал фиксацию, прежде чем вы смогли нажать на свой. Решение состоит в том, чтобы сделать git осведомленным о слиянии, которое вы сделали.

git rebase --preserve-merges <upstream>

или

git rebase -p <upstream>

Но есть проблема, если в вашем слиянии возникли конфликты, которые вы решили, они не будут подхвачены механизмом переустановки.
И вы снова разрешите конфликты... по крайней мере, это имеет место с git версией 1.7.5.4

(Это вызовет git rerere)

Ответ 2

Было ли вы черрипиком каждый совершать один за другим вручную?

Просто запустите git rebase -i master feature и перепишите историю, как вам нравится.