【问题标题】:Can Mercurial merge a named-branch that isn't a head?Mercurial 可以合并不是头部的命名分支吗?
【发布时间】:2010-12-10 04:27:54
【问题描述】:

基本上,我有 dev 分支,我喜欢做的是在实现某些东西时创建一个功能分支,然后将其合并回来。所以会出现如下情况

 a
 b
 c
 d - dev
/ 
e
f - feature

既然 dev 不是 head,是否仍然可以将 dev 提升到 feature 使得 dev 和 feature 都指向 f?

我很确定 git 可以很好地做到这一点,但似乎无法说服 Mercurial 也这样做......

【问题讨论】:

    标签: mercurial merge branch


    【解决方案1】:

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

    在这种情况下,如果你在 dev 分支上没有从“d”下降的单独提交,那么你需要做的就是运行“hg branch dev”,然后你的下一个提交,从“f”下降,将回到分支开发。我认为这将达到您正在寻找的结果。

    编辑:这可行,但 Steve Losh 建议进行实际合并将导致更合理的历史记录。

    【讨论】:

      【解决方案2】:

      卡尔迈耶是对的。您以 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 上没有其他提交的事实只是一个巧合,不必更改工作流程。

      【讨论】:

      • 嗯。我一直想尝试做你的方法,但我不太记得我做错了什么。也许我会多玩一点,看看我是否能弄明白。谢谢你们!
      • 您在哪个分支上运行该命令?开发?如果在功能上执行,会给我一个“交叉分支”错误
      • 实际上这也是 Git 中更好的工作流程,尽管 git 会让您更改分支的提交 ID 引用。 +1。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-01
      • 2012-02-07
      相关资源
      最近更新 更多