Mercurial能够合并一个非头部的命名分支吗?

7

基本上,我有一个开发分支(dev branch),我想做的是在实现某些功能时创建一个特性分支(feature branch),然后再将其合并回去。所以会出现以下情况:

 a
 b
 c
 d - dev
/ 
e
f - feature

由于dev不是头部,是否仍然有可能将dev提升到feature,使得dev和feature都指向f?

我相信git可以很好地完成这个任务,但似乎无法说服Mercurial做同样的事情...

2个回答

19

Carl Meyer是正确的。您正在以Git用户的身份思考,而Mercurial处理方式不同。

您可以像Carl建议的那样,强制下一次提交在dev分支上进行。但是如果我看到这样做,个人会觉得相当混乱,因为在dev分支中会存在不连续性。

我处理的方式是将功能分支合并回去:hg update dev && hg merge feature && hg commit -m 'Merge in the completed feature.'

这将导致一个类似于下面的图形:

  a - dev
  b - dev
  c - dev
  d - dev
 /|  
e | - feature
f | - feature
 \|
  g - dev

对我来说,这清楚地说明了发生了什么。 当你为一个新功能创建分支并完成后将其合并到dev分支中时。与此同时,dev上没有其他提交事实只是巧合,并不必改变工作流程。


嗯,我一直想尝试你的方法,但是我不太记得我哪里做错了。也许我会再试一下看看能否找出问题所在。 谢谢你们俩! - Calyth
你在哪个分支上运行这个命令?是dev分支吗?如果在feature分支上执行会出现“交叉分支”错误。 - Nuno Furtado
实际上,在Git中这也是更好的工作流程,尽管Git允许您更改分支的提交ID引用。+1。 - Ben Collins

6
在hg中,命名分支(与git不同)没有“指向”任何地方。分支名称不是特定修订版本的可移动别名。每个提交都有一个元数据标记,用于命名该提交所在的分支;仅此而已。
编辑:这样做可以实现您想要的结果,但是Steve Losh建议进行实际合并将会产生更合理的历史记录。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接