我需要删除一个更改集说123b,它位于分支中几个更改集的中间。 123b之后,我提交了许多变更集。如何在不丢失最近更改的情况下删除更改集123b
答案 0 :(得分:1)
从技术上讲,您不能:变更集包括其所有父级历史记录,因此,通过删除123b
,可以销毁其所有后代。现在,任何直接子代都由于不存在的123b
而受到损坏,而这些子代中的任何子代也受到间接破坏,依此类推。
但是,有一个好的方面。您可以用改进的新后代替换所有后代。为此,请使用hg histedit
。这是一个捆绑扩展,必须首先启用。 (例如,参见example)(或者,也可以使用rebase或graft,但我不建议这样做-histedit更简单。)
请注意,histedit本质上等同于剥离变更集及其所有后代,然后添加新的变更集。这样,如果您通过将变更集发送到另一个克隆来将其公开,则它稍后将与另一个克隆及其所有后代一起从 返回。默认情况下,histedit不允许您编辑公共变更集,这样就不会出错。另请参见What are the best and must-have hg / mercurial extensions?。
(有一种更好的方法(我认为),但它涉及添加一个非捆绑式扩展名,特别是https://book.mercurial-scm.org/read/changing-history.html。请参见evolve extension。我只是喜欢它的理论。)
答案 1 :(得分:1)
说您有变更集:
A-B-C-D-....
(您的123b可以用B表示)。
如果B,C及其后代还没有被推送(因此它们仅存在于您的本地存储库中),那么您可以先将C重新设置为A,然后剥离B。