Если у вас есть ветка поддержки, где вы исправляете ошибки и создаете новые версии. На master у вас есть следующая версия, где вы также часто создаете новые версии.
Каждый раз, когда вы создаете новую версию, вы изменяете версию в каком-либо файле, фиксируете этот новый файл, создаете тег и нажимаете. Теперь слияния от support до master всегда будут конфликтовать в файле, содержащем информацию о версии.
Если файл, содержащий информацию о версии только , содержит информацию о версии, вы можете пойти с ответом fcurella. Но если он действительно может также содержать объединяемую информацию (pom.xml, gradle.properties, MANIFEST.MF, ...), вы должны выполнить некоторые дополнительные действия.
Позволяет использовать следующий пример
C---D*---E---F* support
/
A---B---G---H*---I master
, где коммиты со звездами содержат только изменения из-за изменений версии, которые следует игнорировать при слиянии.
Чтобы объединить с поддержкой в master без конфликтов слияния из-за сборок версий, вы можете выполнить одно из следующих действий:
Несколько коммитов слияния
git checkout master
git merge C
git merge D -s ours
git merge E
git merge F -s ours
С аргументом -s ours
мы говорим git записывать только слияние без изменения рабочей области. сопоставимо с параметром --record-only
svn .
Приведенное выше приведёт к следующему макету
-------------C---D*---E---F* support
/ \ \ \ \
A---B---G---H*---I---J---K----L---M master
Один коммит слияния с использованием cherry-pick
git checkout master
git merge support -s ours --no-commit
git cherry-pick C E --no-commit
git commit -m 'merged support into master'
сначала мы начинаем слияние, но записываем только слияние без изменения рабочей области и без выполнения коммита слияния. Затем мы выбираем коммиты для слияния, опять же без коммитов. Наконец мы совершаем слияние.
Приведенное выше приведёт к следующему макету
C---D*---E---F* support
/ \
A---B---G---H*---I---J master
Можно даже автоматизировать сбор вишни.
git checkout master
git merge support -s ours --no-commit
for id in `git log support --reverse --not HEAD --format="%H [%an] %s" |
grep -v "bump version" |
sed "s/\(\w*\)\s.*/\1/g"`
do
git cherry-pick --no-commit $id
done
git commit -m 'merged support into master'