And*_*ikh 238 merge mercurial branch hg-merge
我已经完成了一个功能分支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
Run Code Online (Sandbox Code Playgroud)
所以feature-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
|
Run Code Online (Sandbox Code Playgroud)
更新:从版本1.5开始,Mercurial似乎不再显示输出中已关闭分支的头部hg heads.
是否有可能关闭合并的分支而不再留下一个头?是否有更正确的方法来关闭功能分支?
相关问题:
And*_*ikh 218
一种方法是让合并的功能分支保持打开(和不活动):
$ 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)
Run Code Online (Sandbox Code Playgroud)
另一种方法是在使用额外提交合并之前关闭功能分支:
$ 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)
Run Code Online (Sandbox Code Playgroud)
第一个更简单,但它留下了一个开放的分支.第二个没有留下开放的头/分支,但它需要一个辅助提交.可以使用此额外提交将最后一次实际提交与功能分支组合--close-branch,但是应该事先知道哪个提交将是最后一次提交.
更新:由于水银1.5,你可以随时关闭分支,所以它不会出现在两个hg branches及hg heads了.唯一可能让你恼火的是技术上修订图还会有一个没有孩子的修订.
更新2:由于Mercurial 1.8 书签已成为Mercurial的核心功能.书签比分支分支更方便分支.另见这个问题:
Nac*_*mpi 79
imho有两个忘记关闭的分支机构
案例1:分支未合并为默认值
在这种情况下,我更新到分支并使用--close-branch进行另一次提交,不幸的是,这会选择分支成为新的提示,因此在将其推送到其他克隆之前,我确保真正的提示会收到更多更改,而其他提示不要对这个奇怪的小费感到困惑.
hg up myBranch
hg commit --close-branch
Run Code Online (Sandbox Code Playgroud)
案例2:分支合并为默认值
这种情况与案例1没有太大的不同,可以通过再现案例1和另外两个案例的步骤来解决.
在这种情况下,我更新到分支变更集,使用--close-branch进行另一次提交,并将成为提示的新变更集合并为默认值.最后一个操作创建了一个默认分支中的新提示 - HOORAY!
hg up myBranch
hg commit --close-branch
hg up default
hg merge myBranch
Run Code Online (Sandbox Code Playgroud)
希望这有助于未来的读者.
Syn*_*r0r 11
编辑哎哟,太晚了......我知道读你的评论说你要保留feature-x changeset,所以这里的克隆方法不起作用.
我仍然会在这里给出答案,因为它可以帮助别人.
如果你想完全摆脱"功能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
Run Code Online (Sandbox Code Playgroud)
所以你这样做:
hg clone . ../cleanedrepo --rev 7
Run Code Online (Sandbox Code Playgroud)
你会得到以下内容,你会发现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
Run Code Online (Sandbox Code Playgroud)
我可能误解了你的想法,但请不要修改,我花时间复制你的用例:)
奇怪的是,还没有人建议关闭特征分支的最强大的方法...你可以将合并提交与--close-branch标志结合起来(即提交修改后的文件并同时关闭分支):
hg up feature-x
hg merge default
hg ci -m "Merge feature-x and close branch" --close-branch
hg branch default -f
Run Code Online (Sandbox Code Playgroud)
所以,就是这样.没有一个额外的头衔.没有额外的提交.