Version control 在Mercurial中没有可合并的分支时,如何合并两个分支

Version control 在Mercurial中没有可合并的分支时,如何合并两个分支,version-control,mercurial,merge,Version Control,Mercurial,Merge,我是mercurial的新手,我正在尝试做一些非常简单的事情,但不知道如何去做。我创建了一个分支,在不干扰主分支的情况下进行一些实验 trunk A -- B -- C \ experiment D -- E -- F 我喜欢实验进行的方式,并希望将其与trunk合并并获得 trunk A -- B -- C -- D -- E -- F 然而,由于“trunk”分支中没有任何更改,因此merge

我是mercurial的新手,我正在尝试做一些非常简单的事情,但不知道如何去做。我创建了一个分支,在不干扰主分支的情况下进行一些实验

trunk       A -- B -- C
                       \
experiment              D -- E -- F
我喜欢实验进行的方式,并希望将其与trunk合并并获得

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

然而,由于“trunk”分支中没有任何更改,因此merge表示没有要合并的内容,这很公平。我只需要结束一个叫做“主干”的分支。我该怎么做呢?

一旦创建了一个分支,就不能准确地实现一个默认分支(除了一些例外,请参见下文)。但是,您应该能够将
实验
合并到
默认
中,并实现相同的功能

如果您从以下内容开始:

并执行以下操作:

hg update trunk
hg merge experiment
您应该以以下方式结束:

其他选项:


使用或,您实际上可以将
实验
分支上的变更集重新定位到
默认
。这将基本上删除
实验
命名分支,并创建更多的
默认
变更集。但是,如果您已经与其他用户共享了上面第一个映像中的更改集,则无法执行此操作。

在Mercurial中合并始终按以下方式进行:

  • 更新到其中一个分支(请参阅下面的注释,了解为什么要选择一个或另一个分支,而不仅仅是选择一个随机分支)
  • 与其他分支合并
  • 例如,在您的情况下,您将执行以下操作:

    hg update trunk
    hg merge experiment
    
    选择要更新到的正确分支 <> P>在选择哪一个分支要更新,哪些要合并,以及与书签和分支名称有关时,需要考虑一些事情。

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

    但是,如果您更新到实验分支merge with trunk,则合并变更集将位于实验分支上

    当思考你为什么合并的时候,这是很重要的。您是将实验合并到主干中,还是使用主干上发生的其他更改更新实验

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

    hg update moving-target
    
    然后提交,书签将跟随您的提交,即它将向前移动


    与此相关,如果主干分支的头部有一个名为moving target的书签,并更新到该书签,则提交合并更改集时,会将该书签向前移动。

    是否创建了命名分支?我认为您需要在此处重新讨论您的问题。我在默认分支上创建了3个变更集,然后创建了一个名为“实验”的新命名分支,并在该分支上提交了3个变更集。然后我更新回默认值的头部,并要求Mercurial与实验分支合并,它成功了,它合并了,现在我可以提交了。你能做一个
    hg摘要
    ,然后是你说的
    hg合并
    吗?是的,分支有一个与之相关的名称it@Lasse谢谢,从您的评论来看,在使用merge命令之前,我似乎需要切换以使“trunk”分支处于活动状态?您合并到当前分支,如果您目前在实验分支,Mercurial认为您希望将其与自身合并。所以更新到一个,和另一个合并。例如,
    hg更新主干
    ,然后
    hg合并实验
    。另外,为了将来的参考,您可能应该为您的主分支使用默认名称(正如Mercurial所建议的),在某些地方不需要明确分支名称,默认名称是隐含的。