Сквош частое слияние истории из основной ветки в одну - PullRequest
0 голосов
/ 08 октября 2018

Например, я только что слил главную ветку с моей веткой функций.Тогда кто-то толкнул новые вещи на мастера.Поэтому я снова слился, чтобы не отставать.А потом кто-то снова толкнул ... Я снова сливаюсь.Как сжать предыдущие слияния так, чтобы два действия слияния были объединены в одно?

Как я могу превратить это:

o---o---A---B---C---D---E
         \       \   \   \
          F---G---H---I---J

в это:

o---o---A---B---C---D---E
         \               \
          F---G-----------J'

где J и J 'содержат одинаковые коды.

Ответы [ 2 ]

0 голосов
/ 08 октября 2018

Этот метод предотвращает необходимость повторного разрешения конфликтов слияния путем повторного воспроизведения ранее разрешенных изменений в коммите слияния.

git checkout feature
git diff master > feature.patch
git reset --hard G
git branch --move trimmed_feature
git checkout -b feature master
git merge --strategy ours trimmed_feature --no-edit
git apply feature.patch --index
git commit --amend --message "Merge branch 'master' into feature"
git branch -D trimmed_feature

Сначала мы удаляем старые слияния, чтобы создать обрезанную ветвь объектов, затем создайте чистую ветвь объекта из master, объедините нашу обрезанную ветвь функции, используя git merge --strategy ours, чтобы игнорировать изменения, затем повторно примените ранее разрешенные изменения из патча.

0 голосов
/ 08 октября 2018

Если вы сделали коммиты слияния только с признаком G, как на диаграмме, вы можете сбросить свою ветвь обратно на этот коммит (используя --hard, чтобы также сбросить файлы рабочей копии), а затем повторить слияние:

git checkout feature
git reset --hard G
git merge master

Вы также можете использовать git rebase master вместо git merge master, чтобы ваша ветвь содержала только коммиты F' и G', ответвления от E на мастере.

...