在 Mercurial 中,可以通过多种方式暂停事情。最简单的方法是根本不把它推到任何地方。在你回到历史之后
$ hg update 3200
您可以使用
$ hg push -r .
只推送到修订版 3200。这.
很重要 - 这意味着工作副本父修订版,在本例中为 3200。修订版 3200 不会在您的本地存储库中“提示”,因为您仍然有修订版 3201-3206,并且最高编号修订始终是我们所说的“提示”。换句话说,历史是这样的:
[3199] -- [3200] -- [3201] ... [3205] -- [3206]
^ ^
"." "tip"
我在其中标记了当前工作副本父修订和提示修订。
当您开始基于修订版 3200 工作时,图表将变为
[3199] -- [3200] -- [3201] ... [3205] -- [3206]
\
\-------------------------------- [3207]
^
".", "tip"
请尽量不要过分强调“小费”。它一直在变化,通常不是很有趣。如果您跳回 3206 并进行提交,则 tip 将表示您的存储库中新创建的修订版 3208。在另一个存储库中,tip 可以是其他东西,具体取决于从您那里提取的内容以及提取的时间。
如果你经常需要做hg push -r .
,那么我建议你为它创建一个别名。这样的别名将是一个更温和的推动,因此可以称为“轻推”:
[alias]
nudge = push -r .
有了它在你的工具箱中,你总是可以做到
$ hg nudge
将您刚刚创建的变更集发送到服务器,而不必担心发送您可能搁置的任何其他分支。
最后,记住你可以使用
$ hg update 3206
$ hg commit --close-branch -m "Abandoning this line of development"
将 3206 变更集标记为“已关闭”。这意味着它不会出现,hg heads
并且在您运行时不会考虑合并hg merge
。如果您将它推送到服务器,您将需要使用hg push --force
它,但是没关系,因为您没有创建多个开放头,您只需添加另一个封闭头。
多个开放头的问题实际上是其中一个hg clone
可能会更新一个新的,这会令人困惑——人们不知道从哪里开始工作。使用最新版本的 Mercurial,hg clone
不会更新到封闭的头部,因此您可以避免这个问题。
您可以通过简单地基于它进行子提交来重新打开封闭的头部。这意味着您可以暂时关闭一条开发线而不会产生不良影响,除了图表中的一条注释说明该分支在某个时间点关闭。