如何正确closuresMercurial中的function分支?

我已经完成了function分支feature-x 。 我想合并结果回到default分支,并closuresfeature-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分支(变化40-41)被closures,但是有一个新的头 ,即closures分支变化集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

是否有可能closures一个合并的分支,而不会离开一个头? 是否有更正确的方法来closuresfunction分支?

相关问题:

  • 这个Mercurial工作stream程有一个缺点:命名分支“死”头?

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

 $ 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) 

另一种方法是在合并之前使用额外的提交closures特性分支:

 $ 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可以随时closures分支,所以它不会出现在hg brancheshg heads 。 唯一可能会让你烦恼的是从技术上来说,修改图还是会有一个没有修改的版本。

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

  • Mercurial分支和书签

对于忘记closures的分支,有两种情况

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

在这种情况下,我更新到分支,并做了另一个提交 – closures分支,不幸的是,这select分支成为新的提示,因此在将其推到其他克隆之前,我确信真正的提示接收到一些更改和其他不要对这个奇怪的提示感到困惑。

 hg up myBranch hg commit --close-branch 

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

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

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

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

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

编辑哎哟,太迟了…我知道读你的评论说,你要保持functionX变化集,所以克隆方法在这里不起作用。

我仍然会在这里回答这个问题可以帮助别人。

如果你想完全摆脱“functionX”,因为,例如,它不工作,你可以克隆。 这是文章中解释的方法之一,它确实有用,并且特别针对头部进行了谈话。

据我了解,你有这个想要彻底摆脱“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 

我可能误解了你的想法,但请不要模糊,我花时间再现你的用例:)

奇怪的是,还没有人build议closuresfunction分支的最健壮的方式…您可以合并提交与 – 分支分支标志(即提交修改后的文件并同时closures分支):

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

所以,就是这样。 没有一个额外的头在revgraph。 没有额外的提交。