Наш рабочий процесс разработки 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
, но безуспешно.