如果您有一个支持分支,可以在其中修复错误并构建新版本。在master上,您具有下一个版本,在该版本中您还经常构建新版本。
每次构建新版本时,都会在某个文件中更改版本,提交该新文件,创建标签并推送。现在,从支持到母版的合并将始终在包含版本信息的文件中发生冲突。
如果包含版本信息的文件仅包含版本信息,则可以使用fcurella的答案。但是,如果确实确实还包含可合并的信息(pom.xml,gradle.properties,MANIFEST.MF等),则必须执行一些额外的操作。
让我们使用以下示例
C---D*---E---F* support
/
A---B---G---H*---I master
其中带有星号的提交仅包含由于版本更改而引起的更改,在合并期间应忽略这些更改。
要将支持合并到主服务器中而不会由于版本构建而导致合并冲突,您可以执行以下任一操作:
多次合并提交
git checkout master
git merge C
git merge D -s ours
git merge E
git merge F -s ours
使用这个-s ours参数,我们告诉git仅记录合并而不更改工作区。这相当于svn的--record-only选项。
以上将导致以下布局
-------------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'