Mercurial是否有类似于Git的no-fast-forward合并的功能?

8

Mercurial中有什么与Git的无快进合并相对应的功能(在可以进行快速转发的情况下)?

编辑

假设您在主分支/默认分支的末尾/顶部有一个分支/书签:

 o feature
 |
 o
 |
 o master/default
 |
 ...

简单的快进合并将导致以下结果:
 o feature/master/default
 |
 o
 |
 o
 |
 ...

一个不快进式合并会看起来像这样:

 o merge commit - feature/master/default
 | \
 |  o     
 |  |
 |  o
 | /
 o
 |
 ...

“Update”?这不就是快进式合并吗?它只是做一次更新操作?当然,Mercurial 不会检测到这一点,但我认为它也不会尝试执行合并。 - Lasse V. Karlsen
他要求提供一个不快进的替代方案,而不是一个快进的替代方案。 :) - Steve Kaye
如果你找不到任何东西,那么在合并之前在主分支上进行一个虚拟提交会产生你想要的结果吗? - Thorbjørn Ravn Andersen
1个回答

8

这取决于您如何提交您的特性分支。

如果该特性是在命名分支上开发的,则可以获得等同于无快进合并的效果。事实上,命名分支不能以其他方式合并。

hg update default
hg branch feature-1
...work...
hg commit -m "implemented feature on named branch"
hg update default
hg merge feature-1
hg commit -m "merged feature-1 to default"

这将导致生成以下类似的图表:
o   merged feature-1 to default
|\
| o feature-1: implemented feature on named branch
|/
o
|

此功能仅适用于命名分支(即使用 hg branch 命令创建的分支)。对于匿名分支或书签无效。
您可能还对Mercurial邮件列表上讨论此问题的此帖子(死链)感兴趣。

1
这对于那些真的喜欢合并变更集“标点符号”的人来说是一个好主意。你有一个名为“newfeature”的命名分支,然后在该分支内有几个书签。 - Omnifarious
迄今为止,这个答案最好的部分是最后一行。 - Ringding
您可以使用“debugsetparents”命令在Mercurial中进行Oedipus合并,并使用匿名头。请参见:http://hgtip.com/tips/advanced/2010-04-23-debug-command-tricks/#3-simulate-gits-no-ff-merges-with-anonymous-heads。虽然我认为调试命令没有其他Mercurial命令的兼容性保证。 - jwd

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