我已经完成了一个特征分支feature-x的工作。我想将结果合并回默认分支,并关闭feature-x,以便在hg分支的输出中摆脱它。
我想到了以下场景,但它有一些问题:
$ 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分支(更改40-41)被关闭,但是有一个新的头部,关闭的分支更改集44,每次都会在hg个头部中列出:
$ 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头的输出中显示关闭的分支的头。
是否有可能关闭一个合并的分支而不留下一个头?关闭一个特性分支有更正确的方法吗?
相关问题:
这个Mercurial工作流是否有一个缺点:命名分支“死”头?
编辑啊,太晚了……我知道你的评论说你想保留feature-x更改集,所以克隆方法在这里不起作用。
我还是把答案留在这里,因为它可能会帮助到其他人。
如果你想完全摆脱“功能X”,例如,因为它不起作用,你可以克隆。这是文章中解释的一种方法,它确实有效,它专门讨论了正面。
据我所知,你有这个,想要一劳永逸地摆脱“特征-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
我可能误解了你想要的东西,但请不要修改,我花了时间重现你的用例:)
一种方法是让合并的功能分支保持开放(和不活跃):
$ 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)
另一种方法是在合并之前使用额外的commit关闭一个特性分支:
$ 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分支和hg头部了。唯一可能让您烦恼的是,从技术上讲,修订图仍然会有一个没有子版本的修订。
更新2:自从Mercurial 1.8以来,书签已经成为Mercurial的核心功能。对于分支来说,书签比命名分支更方便。还有这个问题:
Mercurial分支和书签
Imho,有两种情况的分支机构被忘记关闭
案例1:
分支没有合并到default中
在这种情况下,我更新到分支,并做另一个提交—关闭分支,不幸的是,这将选择分支成为新的提示,因此在将它推到其他克隆之前,我确保真正的提示接收更多的更改,其他人不会对那个奇怪的提示感到困惑。
hg up myBranch
hg commit --close-branch
案例2:
分支被合并为default
这种情况与情况1没有太大的不同,它可以通过重现情况1和另外两个情况的步骤来解决。
在这种情况下,我更新到分支变更集,使用——close-branch再次提交,并将成为提示的新变更集合并为默认值。最后一个操作在默认分支中创建一个新的提示- HOORAY!
hg up myBranch
hg commit --close-branch
hg up default
hg merge myBranch
希望这对以后的读者有所帮助。