首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Git正在将修补程序合并到多个分支

Git正在将修补程序合并到多个分支
EN

Stack Overflow用户
提问于 2012-05-26 05:04:51
回答 3查看 14.8K关注 0票数 26

我一直在尝试理解git分支模型。我一直在寻找http://nvie.com/posts/a-successful-git-branching-model/的一些想法,从Subversion中我真正期待的一件事是在一个地方进行更改,并将其合并到所有需要它的分支中。在Subversion中,我们最终复制了大量的代码。

然而,我仍然不完全理解这一点。这是我拥有的标准类型的工作流,它总是会出现冲突。

代码语言:javascript
复制
# 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。

不,我想在分支上创建一个热修复程序并将其移动到主干上。

代码语言:javascript
复制
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的文章,我测试了一下,它确实起作用了:

代码语言:javascript
复制
git checkout v3
git cherry-pick a518b0b75eaf28868
git checkout master
git cherry-pick a518b0b75eaf28868

然而,这似乎不是处理这个问题的“正确”方法。有什么建议吗?

EN

回答 3

Stack Overflow用户

发布于 2012-05-26 05:58:05

如果你想获得更高的技术含量,你可以从一个共同的祖先创建修补程序:

代码语言:javascript
复制
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分支标签保留在热修复提示,而不是将标签拉到v3master。(您可以省略该标志并获得相同的行为,因为hotfix分支有一个不在masterv3中的提交。更多信息,请访问in the docs。)

就我个人而言,我认为这有点过头了。我建议使用gahooa:在分支上进行有意义的热修复,然后根据您希望分支之间的关系进行合并或选择。

票数 28
EN

Stack Overflow用户

发布于 2012-05-26 05:12:02

在这种情况下,你在分支"4.0“上工作,并且必须在"3.1”上进行修复,在提交“3.1”之后,你可以重新基址"4.0“:

确保您在功能分支4.0上:

代码语言:javascript
复制
git checkout 4.0

保存当前工作,以便可以检出其他分支:

代码语言:javascript
复制
git stash  
git checkout 3.1  

进行编辑并提交:

代码语言:javascript
复制
git commit -a -m "bug fix"  
git checkout 4.0  

取回您的更改:

代码语言:javascript
复制
git stash apply  

更改4.0,使其成为“3.1”的当前标题的分支:

代码语言:javascript
复制
git rebase "3.1"
票数 1
EN

Stack Overflow用户

发布于 2015-08-01 03:46:28

我也一直在为这个问题而苦苦挣扎,我认为如果你愿意稍微改变一下你的版本控制策略(也就是脱离Maven鼓励的-SNAPSHOT版本),这个问题可以通过在主服务器(或者你的开发分支是什么)上使用一个固定的版本(比如快照或0.0.0-快照)来解决。(如果您使用的是Maven,那么快照后缀很重要,因为Maven对待快照版本的工件与其他工件不同。)

事实上,我认为你应该制定一项政策,只在你的生产分支(你用来构建版本的分支)或那些仅用于发布目的的分支(例如,更改版本号)上更改版本号,并且您永远不会打算将其合并回开发分支。

我还没有真正使用过这个策略,但我只是在考虑它,我想我会开始尝试它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10761348

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档