在Mercurial中,过时的变更集可能会被迫变得过时吗?

时间:2015-04-09 15:06:00

标签: mercurial

在具有后继的Mercurial变更集中,标记为obsolete

这个标记可以(强行)以某种方式被移除吗?

使用hg strip删除后继者之后,原始变更集仍然标记为已过时且已灭绝。 hg evolve拒绝重新创建继任者。

3 个答案:

答案 0 :(得分:10)

您无法将更改取消标记为过时,但您可以使用&#34; hg touch <rev> --hidden&#34;将其恢复生命,其中touch是{{1}}的一部分新命令{3}}

FWIW。它也可以改变过时的变化,但如果你使用触摸,你可能会减少并发症。

答案 1 :(得分:4)

是的!您现在可以删除过时标记。当问到这个问题时,也许在2015年是不可能的。

该解决方案位于2018年4月18日来自user377178的答案中:hg --hidden debugobsolete --delete <revindex>

请注意,您不使用变更集ID。您必须使用索引号(至少在Mercurial 4.1.3中使用)。运行hg --hidden debugobsolete --index以获取带有过时标记的变更集列表。找到您想要不再使用的变更集的索引,然后运行hg --hidden debugobsolete --delete <revindex>,并用索引代替 revindex 。然后,您过时的变更集将不再过时。 (它可能多次出现在列表中-我尚未进行彻底调查。)

debugobsolete命令当前未在evolve user guide中列出,甚至在recovering obsolete changesets的部分中也没有列出。但是,它在Evolve How To指南中列出。

非常感谢user377178。

答案 2 :(得分:2)

我已经提出了以下bash函数 - 一个黑客并可能依赖于mercurial版本,但多年来一直运作良好。将revset作为参数。

git rebase