Изменить историю тематической ветки git, которая использовала слияния, для использования перебазирования

Наш рабочий процесс разработки git заключается в том, что тематические ветки постоянно перебазируются на последний мастер, пока они не будут объединены.

Тем не менее, новый разработчик создал тематические ветки, в которых он сделал несколько слияний master со своими тематическими ветками, чтобы поддерживать их в актуальном состоянии.

    A---B---C---D---E topic
   /       /   /
  F---G---H---I master

Хотя слияние этой тематической ветки с master было бы совершенно правильным, это приводит к очень запутанной истории. Я хочу преобразовать эти тематические ветки в чистую линейную перебазированную историю, которая может быть аккуратно объединена в основную с помощью единственного --no-ffкоммита слияния, т.е.:

                A'---B'---E' topic
               /
  F---G---H---I master

В идеале должно быть немного git-fu это позволило бы мне выполнить перебазирование, взяв коммиты в ветке темы как есть, при этом автоматически применяя информацию о разрешении конфликтов слияния, уже доступную в коммитах слияния темы, таких как C и D.

Я знаю, что могу просто применить патч «git diff master..topic», а затем используйте rebase для работы в обратном направлении и вручную разделите один патч на отдельные коммиты, но есть ли более простой и элегантный подход?

Я пробовал прямые команды git rebaseи git rebase -p, но безуспешно.

6
задан Raman 20 June 2012 в 06:53
поделиться