如何在mercurial中“进一步拆分”?

时间:2010-06-21 03:41:52

标签: mercurial version-control branch

不可否认,这是一个误导性的标题,但我不知道如何把它变得更好。

因此,在我开设分支之前,我错误地推动了所有项目特定的更改。这样,有一些变更集位于默认分支中,不属于那里。他们应该在我新开的分店。

我是否必须首先退出所有变更集,然后再将它们推送到正确的分支机构?这甚至有用吗?

感谢您的帮助。

1 个答案:

答案 0 :(得分:6)

如果不采用EditingHistory(通常会再次提出建议,并且肯定与多变的“不可变历史”设计目标相对立),这些变化将永远存在于您的历史中。但是,您可以在“提示”修订版中撤消它们,然后在分布在多个分支上的多个后续更改集中将它们涓涓细流。

让我们假设这是您当前的历史:

[R0] -> [R1] -> [R2] -> [R3]

修订版R2和R3在默认分支中有你想要的东西,你想要的东西在不同的分支中。您可以创建一个新版本R4,它可以撤消R2和R3。这可以使用你建议的退出来完成,或者因为你正在做多个变更集,也许更容易使用'revert'。

hg update tip ; hg revert --all -r R2 ; hg commit -m 'undid changes R2 and R3'

然后你的历史会是这样的:

[R0] -> [R1] -> [R2] -> [R3] -> [R4]

然后你可以将你的工作分成你希望你最初完成的变更集,产生这样的历史记录:

[R0] -> [R1] -> [R2] -> [R3] -> [R4] -> [R5] -> [R7]
                                   \
                                    --> [R6] -> [R8]

R6和R8可以位于名为“default”的分支上,也可以位于不同的命名分支上。无论哪种方式,您都可以通过执行以下操作将R0推送到R5和R7:

hg push -r R7

这是有效的,因为推动修正版及其所有祖先 - 但是R6和R8不是R7的祖先,所以无论它们在哪个分支上它们都不会被推动。