如何正确关闭Mercurial中的功能分支?

我已完成一项功能分支feature-x 。 我想将结果合并回default分支并关闭feature-x ,以便在hg branches的输出中摆脱它。

我想出了以下场景,但它有一些问题:

$ hg up default
$ hg merge feature-x
$ hg ci -m merge
$ hg up feature-x
$ hg ci -m 'Closed branch feature-x' --close-branch

因此, feature-x分支(changests 40 - 41 )是封闭的,但有一个新的头,关闭分支机构变更44 ,将在上市hg heads每次:

$ hg log ...
o  44 Closed branch feature-x
|
| @  43 merge
|/|
| o  42 Changeset C
| |
o |  41 Changeset 2
| |
o |  40 Changeset 1
|/
o  39 Changeset B
|
o  38 Changeset A
|

更新 :看起来,从1.5版本开始,Mercurial不再显示hg heads输出中封闭分支的hg heads

是否可以关闭合并后的分支而不会再留下一个头? 是否有更正确的方法来关闭功能分支?

相关问题:

  • 这种Mercurial工作流程是否存在缺点:命名分支“死”头?

  • 一种方法是让合并的功能分支打开(并且不活动):

    $ hg up default
    $ hg merge feature-x
    $ hg ci -m merge
    
    $ hg heads
        (1 head)
    
    $ hg branches
    default    43:...
    feature-x  41:...
        (2 branches)
    
    $ hg branches -a
    default    43:...
        (1 branch)
    

    另一种方法是在使用额外提交进行合并之前关闭功能分支:

    $ hg up feature-x
    $ hg ci -m 'Closed branch feature-x' --close-branch
    $ hg up default
    $ hg merge feature-x
    $ hg ci -m merge
    
    $ hg heads
        (1 head)
    
    $ hg branches
    default    43:...
        (1 branch)
    

    第一个更简单,但它留下了一个开放的分支。 第二个不留下开放的头部/分支,但它需要一个辅助提交。 可以使用--close-branch将最后一次实际提交到特性分支与这个额外提交结合起来,但是应该事先知道哪个提交是最后一次提交。

    更新 :由于Mercurial 1.5可以随时关闭分支,因此它不会再出现在hg brancheshg heads 。 唯一可能会让你烦恼的是,从技术上来说,修订图还是会有一个没有童装的版本。

    更新2 :由于Mercurial 1.8书签已成为Mercurial的核心功能。 书签比分支命名更便于分支。 另请参阅此问题:

  • Mercurial分支和书签

  • 对于忘记关闭的分支,有两种情况

    案例1:分支未被合并为默认值

    在这种情况下,我更新到分支并使用--close-branch做另一个提交,不幸的是,这会选择分支成为新提示,因此在将其推送到其他克隆之前,我确保真正的提示接收到更多更改并且其他不要对这个奇怪的提示感到困惑。

    hg up myBranch
    hg commit --close-branch
    

    案例2:分支被合并为默认

    这种情况与情况1没有太大区别,可以通过重复情况1和两个附加情况的步骤来解决。

    在这种情况下,我更新到分支变更集,使用--close-branch做另一个提交,并将成为提示的新变更集合并为默认值。 最后的操作会创建一个新的提示,它位于默认分支 - HOORAY!

    hg up myBranch
    hg commit --close-branch
    hg up default
    hg merge myBranch
    

    希望这有助于未来的读者。


    编辑哎呦,太迟了......我知道阅读你的评论,指出你想保留这个feature-x变更集,所以这里的克隆方法是行不通的。

    我仍然会在这里回答这个问题可能会帮助其他人。

    如果你想完全摆脱“功能X”,因为,例如,它不起作用,你可以克隆。 这是文章中解释的方法之一,它确实有用,它专门讨论头部问题。

    据我了解,你有这个,并希望彻底摆脱“feature-x”头:

    @    changeset:   7:00a7f69c8335
    |   tag:         tip
    | |  parent:      4:31b6f976956b
    | |  parent:      2:0a834fa43688
    | |  summary:     merge
    | |
    | | o  changeset:   5:013a3e954cfd
    | |/   summary:     Closed branch feature-x
    | |
    | o  changeset:   4:31b6f976956b
    | |  summary:     Changeset2
    | |
    | o  changeset:   3:5cb34be9e777
    | |  parent:      1:1cc843e7f4b5
    | |  summary:     Changeset 1
    | |
    o |  changeset:   2:0a834fa43688
    |/   summary:     Changeset C
    |
    o  changeset:   1:1cc843e7f4b5
    |  summary:     Changeset B
    |
    o  changeset:   0:a9afb25eaede
       summary:     Changeset A
    

    所以你这样做:

    hg clone . ../cleanedrepo --rev 7
    

    你会得到以下结果,你会发现feature-x确实不见了:

    @    changeset:   5:00a7f69c8335
    |   tag:         tip
    | |  parent:      4:31b6f976956b
    | |  parent:      2:0a834fa43688
    | |  summary:     merge
    | |
    | o  changeset:   4:31b6f976956b
    | |  summary:     Changeset2
    | |
    | o  changeset:   3:5cb34be9e777
    | |  parent:      1:1cc843e7f4b5
    | |  summary:     Changeset 1
    | |
    o |  changeset:   2:0a834fa43688
    |/   summary:     Changeset C
    |
    o  changeset:   1:1cc843e7f4b5
    |  summary:     Changeset B
    |
    o  changeset:   0:a9afb25eaede
       summary:     Changeset A
    

    我可能误解了你想要的内容,但请不要模糊,我花时间复制你的用例:)

    链接地址: http://www.djcxy.com/p/6405.html

    上一篇: How to correctly close a feature branch in Mercurial?

    下一篇: Mercurial Eclipse Plugin