【问题标题】:How can I "split the branch further" in mercurial?如何在 mercurial 中“进一步拆分分支”?
【发布时间】:2010-06-21 03:41:51
【问题描述】:

诚然,这是一个误导性的标题,但我不知道如何更好地表达它。

所以我犯了一个错误,在我打开一个分支之前推送我所有的项目特定更改。这样,默认分支中有一些不属于那里的变更集。他们应该在我新开的分店里。

我是否必须先退出所有变更集,然后再将它们推送到正确的分支?这还有效吗?

感谢您的帮助。

【问题讨论】:

    标签: mercurial version-control branch


    【解决方案1】:

    如果不求助于 EditingHistory(通常建议再次这样做,并且肯定与反复无常的“不可变历史”设计目标相反),这些更改将永远存在于您的历史中。但是,您可以在您的“提示”修订版中撤消它们,然后在分布在多个分支的多个后续变更集中将它们滴回。

    让我们想象一下这是你目前的历史:

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

    修订版 R2 和 R3 在默认分支中有一些你想要的东西,而你希望在不同的分支中有一些东西。您可以创建一个新的修订版 R4,以撤消 R2 和 R3。这可以按照您的建议使用 backout 来完成,或者由于您正在执行多个变更集,使用“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 的祖先,因此无论它们在哪个分支上都不会被推送。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-07
      • 2019-10-12
      • 2010-09-08
      • 1970-01-01
      相关资源
      最近更新 更多