我一直试图围绕 git 分支模型。我一直在查看http://nvie.com/posts/a-successful-git-branching-model/以获得一些想法,并且来自 Subversion 我真正期待的一件事是在一个地方进行更改并且将它合并到所有需要它的分支。在 Subversion 中,我们最终做了很多代码副本。
但是我仍然没有完全理解这一点。这是我拥有的标准工作流程类型,它总是会出现冲突。
# create new version branch
git checkout master
git checkout -b v3
vim pom.xml # change branch version to "3.1-SNAPSHOT"
git commit -a
git checkout master
vim pom.xml # change master version to "4.0-SNAPSHOT"
git commit -a
所以master在4.0-SNAPSHOT,分支在3.1-SNAPSHOT。
不是我想在分支上创建一个修补程序并将其移动到主干。
git checkout v3
git checkout -b hotfix
vim file.txt # make a bugfix change
git commit -a
git checkout v3
git merge hotfix # this works fine
git checkout master
git merge hotfix # this has a conflict since both branches have changed the version
我理解它为什么会发生,这是有道理的。有没有更好的方法来做到这一点?
我读到了cherry-pick,我对其进行了测试并且确实有效:
git checkout v3
git cherry-pick a518b0b75eaf28868
git checkout master
git cherry-pick a518b0b75eaf28868
但是,这似乎不是处理此问题的“正确”方法。有什么建议么?