代码之家  ›  专栏  ›  技术社区  ›  Calyth

Mercurial可以合并一个不是头的命名分支吗?

  •  7
  • Calyth  · 技术社区  · 15 年前

    基本上,我有dev分支,我喜欢做的是在实现某些东西的同时创建一个特性分支,然后将其合并回去。这样的情况会发生

     a
     b
     c
     d - dev
    / 
    e
    f - feature
    

    既然dev不是head,那么是否仍然可以将dev带到feature,以便dev和feature都指向f?

    我很确定Git能做的很好,但似乎不能说服Mercurial做同样的事…

    2 回复  |  直到 15 年前
        1
  •  19
  •   Steve Losh    15 年前

    卡尔·迈耶是对的。你认为自己是一个Git用户,而Mercurial处理事情的方式不同。

    你可以按照卡尔的建议去做,然后强制下一个提交到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上没有其他提交,这只是一个巧合,不需要更改工作流。

        2
  •  6
  •   Carl Meyer    15 年前

    hg中的命名分支(与git中的不同)不会“指向”任何地方。分支名称不是特定版本的可移动别名。每个提交都有一个元数据标记,用于命名提交所在的分支;仅此而已。

    在这种情况下,如果在dev分支上没有从“d”下降的单独提交,那么您所需要做的就是运行“hg branch dev”,然后从“f”下降的下一个提交将返回到branch dev。我认为这将实现您所期望的结果。

    编辑 :这是可行的,但史蒂夫洛什建议进行一次真正的合并,这将导致一个更明智的历史。