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