Коллега - новичок в Git. Он работал над какой-то веткой функций в течение довольно долгого времени и сейчас создал PR (AzOv DevOps, если это имеет значение).
К сожалению, он не знал о git rebase
и поэтому все время использовал git pull origin master
для синхронизации, что привело к довольно большим коммитам слияния. (в его ветви функций есть 20 «настоящих» коммитов и 9 коммитов слияния)
Теперь это было бы хорошо, но в результате в разных видах PR не только отображаются его изменения, но и вседругие изменения, которые были применены к мастеру за это время. В принципе, сейчас невозможно сделать правильный анализ кода, потому что его изменения неотличимы от всех других изменений.
Теперь я планирую каким-то образом воспроизвести все его изменения, но всякий раз, когда он произвел слияние, я буду делатьперебазировать вместо. Всякий раз, когда возникает конфликт во время перебазирования, смешивание изменений соответствующего коммита слияния должно полностью разрешить это (теоретически). Большинство слияний довольно сложны, поэтому нельзя вручную их переделывать, так как эта работа уже выполнена.
Какой лучший способ добиться этого?
Я пытался git rebase master
, но это не включает коммиты слияния, поэтому их придется делать вручную.
Я также пытался git rebase --preserve-merges master
, но по какой-то причинеэто будет делать перебазирование только до последнего коммита слияния (см. ниже).
Если нет лучшего варианта, мне придется сделать 20 + 9 вишневых пиков ...
Говоря в картинках, ситуация такова:
A---B---C- ... --D---E---F master
\ \ ... \
G---m---H- ... --m---I---J feature
И я хочу это:
A---B---C- ... --D---E---F master
\
G'--m'--H' ... --m'--I'--J' feature
Вариант 1. только даст мне это,но я хочу получить m
s (не обязательно как коммиты, но я хочу, чтобы эти разрешенные конфликты были как-то):
A---B---C- ... --D---E---F master
\
G'------H' ... ------I'--J' feature
Вариант 2. только даст мне это, не сильно помогая:
A---B---C- ... --D---E---F master
\ \ ... \ \
G---m---H- ... --m-------m'--I'--J' feature