我一直在尝试理解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
因此,主节点位于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
然而,这似乎不是处理这个问题的“正确”方法。有什么建议吗?
发布于 2012-05-26 05:58:05
如果你想获得更高的技术含量,你可以从一个共同的祖先创建修补程序:
git merge-base v3 master
git checkout -b hotfix <whatever you got from merge-base>
# make your fix
git checkout v3 && git merge --no-ff hotfix
git checkout master && git merge --no-ff hotfix
v3--------v3 (hotfixed)
/ /
ancestor----hotfix
\ \
master----master (hotfixed)
--no-ff
标志是为了突出显示Git将创建合并提交,将hotfix
分支标签保留在热修复提示,而不是将标签拉到v3
或master
。(您可以省略该标志并获得相同的行为,因为hotfix
分支有一个不在master
或v3
中的提交。更多信息,请访问in the docs。)
就我个人而言,我认为这有点过头了。我建议使用gahooa:在分支上进行有意义的热修复,然后根据您希望分支之间的关系进行合并或选择。
发布于 2012-05-26 05:12:02
在这种情况下,你在分支"4.0“上工作,并且必须在"3.1”上进行修复,在提交“3.1”之后,你可以重新基址"4.0“:
确保您在功能分支4.0上:
git checkout 4.0
保存当前工作,以便可以检出其他分支:
git stash
git checkout 3.1
进行编辑并提交:
git commit -a -m "bug fix"
git checkout 4.0
取回您的更改:
git stash apply
更改4.0,使其成为“3.1”的当前标题的分支:
git rebase "3.1"
发布于 2015-08-01 03:46:28
我也一直在为这个问题而苦苦挣扎,我认为如果你愿意稍微改变一下你的版本控制策略(也就是脱离Maven鼓励的-SNAPSHOT版本),这个问题可以通过在主服务器(或者你的开发分支是什么)上使用一个固定的版本(比如快照或0.0.0-快照)来解决。(如果您使用的是Maven,那么快照后缀很重要,因为Maven对待快照版本的工件与其他工件不同。)
事实上,我认为你应该制定一项政策,只在你的生产分支(你用来构建版本的分支)或那些仅用于发布目的的分支(例如,更改版本号)上更改版本号,并且您永远不会打算将其合并回开发分支。
我还没有真正使用过这个策略,但我只是在考虑它,我想我会开始尝试它。
https://stackoverflow.com/questions/10761348
复制相似问题