我的初始情况类似于this question中的情况。来自强大的Git背景,我想强制推送我的私有分支(在同一名称下)的清理版本,在那里我压扁/折叠了一些提交(使用histedit extension)。我再次做的与this answer相似,但我的处理顺序不同:
$ hg clone -b private_branch <url>
$ hg histedit -r <some_rev> # Fold some commits
$ hg push -f # This creates a second branch head on the server
$ hg update -r <rev_of_original_branch_head>
$ hg commit --close-branch -m 'Closing this branch in favor of a cleaned-up version'
$ hg push
我不明白的是,如果我现在设置一个新的工作树,我会得到
$ hg clone -b private_branch <url>
$ hg log -l 1
changeset: <rev>:<sha1>
branch: private_branch
tag: tip
parent: <tip_rev_of_branch_before_folding>:<sha1>
user: <name> <email>
date: Wed Aug 08 11:48:25 2012 +0200
summary: Closing this branch in favor of a cleaned-up version
为什么tip
指向封闭的分支? hg heads
只是按预期显示我的力量推动的头部。但是,hg heads -t
显示private_branch
的两个头。我还验证了我的结束提交确实是结束提交,hg log --debug
显示extra: close=1
。
编辑:问题是,如果我对新克隆进行提交,我会
$ hg ci -m "test"
created new head
reopening closed branch head <rev>
但是我不想重新打开封闭的分支头,我想在开放的分支头顶部进行。
如何解决此问题,最好不要执行no-op merge?
答案 0 :(得分:1)
tip标签是一个特殊的“浮动”标签,它始终标识 存储库中的最新版本。
(来自http://hgbook.red-bean.com/read/managing-releases-and-branchy-development.html)
这就是tip
指向涉及封闭分支的修订的原因。
这里真的有问题吗?如果你只是继续工作,你将会private_branch
与你想要做出的改变。
答案 1 :(得分:1)
解决方案是简单地做
$ hg update private_branch
将hg parent(s)
所示的工作目录的父修订设置为新创建的打开分支头,远离关闭的分支头。虽然我已经“在那个分支上”,但我需要“切换分支”对我来说有点不直观,但在这种情况下,我没有切换分支,而是在一个分支内切换头。与Git完全不同的东西。