English 中文(简体)
Git 将热链接合并到多个分支
原标题:Git merging hotfix to multiple branches
  • 时间:2012-05-25 21:04:51
  •  标签:
  • git

我一直在尝试环绕树枝模型。 我一直在寻找 < a href=" http://nvie.com/ posts/ a-successful-git-branching-model/" rel="noreferr" > 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

我理解为什么它会发生,而且它也有道理。 是否有更好的方法这样做呢?

我读过樱桃选手的书,

git checkout v3
git cherry-pick a518b0b75eaf28868
git checkout master
git cherry-pick a518b0b75eaf28868

但是,这看起来不像是"正确"的处理方式。有什么建议吗?

最佳回答

真的, 您的答案取决于您是否想要您的树以相同的历史为基础... 例如, 4. 0 是基于最新的 3. X + 4. 0 中的所有变化...

个人而言, 一旦您决定为新版本启动新的分支, 我并不建议您启动新的分支。 在给定的时间点, 软件正在采取不同的方向, 所以您的分支也应该这样做 。

这将git cherry-pick 留给您理想的解决方案。 使任何分支的改变最有意义, 然后樱桃选择旧版本。 这和您检查旧分支和“ 强势” 手动 < / 强势” 应用同样的更改并做出新的承诺一样。 它保持它干净, 直达点 。

Git 合并或重新基点将尝试将分支历史整合在一起, 每一个都以他们自己的方式, 我怀疑你在回传错误修正时不希望这样,等等...

问题回答

如果你想得到超级技术, 你可以从一个共同的祖先创造热字:

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 code> 中不存在的合并承诺。 更多的info < a href="https://git-scm.com/docs/git-merge_fast_forward_merge" rel= " noreferr> 在 docs 。

就个人而言,我认为这太过分了。我同意加胡亚语:让树枝的热点能说得通,然后合并或摘樱桃,这取决于你如何希望树枝相互联系。

在这样的情况下,您正在工作分支“ 4.0”, 并且必须确定“ 3.1 ”, 您可以在实施“ 3.1” 之后将“ 4.0” 重新作为“ 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"

我也一直在努力这个问题,我想如果你愿意稍微改变一下你的版本战略(即脱离马文鼓励的马文鼓励的SNAPSHOT版本),这可以通过在主人(或不管你的发展分支是什么)上使用固定版本(如SNAPSHOT或0.0.0.0-SNAPSHOT)来解决。 (SNAPSHOT后缀很重要,如果你再使用马文,因为Maven对SNAPSHOT所翻译的艺术品的处理方式不同于其他人。 )

事实上,我认为你希望制定一种政策,即只改变生产分支的版本号(从中产生释放的版本号),或只用于释放目的的分支(如改变的版本号),而你从未打算将其并入发展分支。

我还没有实际使用过这个策略, 但只是在考虑一下, 我想我会开始尝试一下。





相关问题
git confusion - cloning a repo is returning a past version

Im having some confusion with my git usage. I cloned a repo from one comp to the other, and the new clone is the state of the original that was active some time ago. So its cloning a past version. ...

Appropriate strategy for tagging and hotfixing with git

I was wondering if the strategy I m using for tagging and hotfixing tags (which then I use for deploying rails applications) with git is appropriate. For tagging I just tag a commit of the master ...

Tips on upgrading CVS to git/hg?

We still use CVS, I use git and hg for my personal use though I m still a novice at both, but I realize they re much more modern and better, faster, distributed, etc. It s just everyone is so ...

Using Git in a TFS shop

Using Git at home has spoiled me - I now find using TFS at work to be a bit of a drag and want to explore the possibility of using Git locally and syncing somehow with TFS. I figure there are a few ...