代码之家  ›  专栏  ›  技术社区  ›  Andrey Vlasovskikh

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

  •  236
  • Andrey Vlasovskikh  · 技术社区  · 15 年前

    我已经完成了一个功能分支的工作 feature-x . 我想将结果合并回 default 分支和关闭 特性-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
    

    所以 特性-X 分支(变更者) 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在 汞头 不再。

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

    相关问题:

    4 回复  |  直到 10 年前
        1
  •  215
  •   Community Mohan Dere    8 年前

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

    $ 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 branches hg heads 不再。唯一可能让你恼火的是,从技术上讲,修订图在没有孩子的情况下还会有一次修订。

    更新2 :因为Mercurial 1.8 书签 已经成为反复无常的核心特征。书签比命名分支更便于分支。另请参见此问题:

        2
  •  78
  •   Adam Finley    10 年前

    imho有两个分支机构忘记关闭

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

    在本例中,我更新到分支,并使用--close branch执行另一个提交操作,不幸的是,这会选择分支成为新的提示,因此在将其推送到其他克隆之前,我会确保真正的提示收到更多的更改,而其他的提示不会对这个奇怪的提示感到困惑。

    hg up myBranch
    hg commit --close-branch
    

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

    这种情况与案例1没有太大的不同,可以通过复制案例1的步骤和另外两个步骤来解决。

    在本例中,我更新到分支变更集,使用--close branch执行另一个提交,并将成为tip的新变更集合并到默认值。最后一个操作将创建一个位于默认分支-hooray中的新提示!

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

    希望这能帮助未来的读者。

        3
  •  11
  •   SyntaxT3rr0r    15 年前

    编辑 哎呀,太晚了…我知道读过你的评论,说你想保留Feature-X变更集,所以这里的克隆方法不起作用。

    我还是把答案放在这里,因为它可以帮助其他人。

    如果你想彻底摆脱“功能X”,因为,例如,它不起作用,你可以克隆。这是本文中解释的方法之一,它确实有效,并且专门讨论heads。

    据我所知,你有这一点,并希望一次性摆脱“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
    

    我可能误解了你想要的,但请不要修改,我花了时间复制了你的用例:)

        4
  •  7
  •   tav    10 年前

    奇怪的是,还没有人提出关闭特征分支的最有力的方法…… 你可以 结合 merge commit with--close branch标志(即提交修改过的文件并同时关闭分支):

    hg up feature-x
    hg merge default
    hg ci -m "Merge feature-x and close branch" --close-branch
    hg branch default -f
    

    就是这样。转速表上没有多余的人。没有额外的承诺。