如果没有要合并的话,如何在Mercurial中合并两个分支

时间:2011-04-18 19:37:59

标签: version-control mercurial merge

我是mercurial的新手,我正在尝试做一些非常简单但却无法弄清楚如何做的事情。我创建了一个分支来做一些实验,而不会打扰主分支。

trunk       A -- B -- C
                       \
experiment              D -- E -- F

我喜欢实验的方式,并希望将其与trunk合并并获取

trunk       A -- B -- C -- D -- E -- F

然而,由于'trunk'分支中没有任何变化,合并表示没有任何合并,这是公平的。我只需要结束一个名为“trunk”的分支。我怎么能这样做?

2 个答案:

答案 0 :(得分:65)

Mercurial中的合并始终以下列方式进行:

  1. 更新到其中一个分支(请参阅下面的注释,了解您为什么要选择其中一个而不只是选择一个随机分支)
  2. 与其他分支合并
  3. 例如,在您的情况下,您可以这样做:

    hg update trunk
    hg merge experiment
    

    选择要更新的正确分支

    在选择要更新的分支以及要合并的分支时,需要考虑一些事项,并且它与书签和分支名称有关。

    先取分支名称。如果您首先更新到主干分支,然后与实验合并,则合并变更集将位于主干分支上。

    但是,如果您更新到实验分支,与trunk合并,那么合并变更集将在实验分支上。

    在考虑合并的原因时,这一点很重要。您是否正在将实验合并到主干中,或者您是否正在使用在主干上发生的其他更改来更新实验。

    对于书签,对于较新版本的Mercurial,书签是不可或缺的一部分,如果您更新为书签,请说如下:

    hg update moving-target
    

    然后提交,该书签将遵循您的提交,即。它会前进。

    在此基础上,如果在主干分支的头部有一个名为moving-target的书签,并更新到该书签,则合并变更集在提交时将向前移动该书签。

答案 1 :(得分:13)

创建分支后,您无法完全实现单个默认分支(有一些例外,请参见下文)。但是,您应该能够将experiment合并到default并实现相同的目标。

如果你从这开始:

enter image description here

并执行此操作:

hg update trunk
hg merge experiment

你应该最终得到这个:

enter image description here

其他选项:

使用rebasepatch queue,您实际上可以将experiment分支上的变更集重新定位到default。这基本上会删除experiment命名分支并再创建一些default更改集。但是,如果您已经从上面的第一张图片与另一位用户共享了更改集,则无法执行此操作。