【问题标题】:Retroactive named branching in MercurialMercurial中的追溯命名分支
【发布时间】:2011-01-22 05:36:47
【问题描述】:

有没有办法在提交后将一堆 Mercurial 变更集与命名分支相关联,即追溯性?

【问题讨论】:

    标签: mercurial branch


    【解决方案1】:

    我只是想这样做,这是我找到的解决方案。 自最初提出问题以来已经过去了一年,这可能解释了为什么我现在可以找到解决方案。 它的缺点是您在此过程中创建了额外的修订,但这对我来说还不错。

    首先,您返回要创建分支的位置。 在我的情况下,我实际上想启动一个新的根(因为我在启动存储库时不是很明智,但无论如何),所以我将更新为 null。您可能想从其他地方开始,这取决于您的情况。

    $ hg update null
    

    然后,创建分支。

    $ hg branch blah
    $ hg commit -m "Created blah branch."
    

    然后,我们将所做的所有提交 rebase 到我们的新分支上:

    $ hg rebase -s SOURCE -d DEST
    

    这里的 SOURCE 应该是您在要从中创建分支的提交中所做的第一个提交,而 DEST 应该是创建分支的提交(我们在上面提交的那个)。

    【讨论】:

    • 谢谢,这很好用。这应该是公认的答案。
    • 这行得通(我认为),但如果您与任何人共享您的存储库(正如@tonfa 间接指出的那样),它可能会出现问题。正如rebase extension 所指出的,您不应该重新设置已经与他人共享的变更集。这样做会迫使其他人执行相同的变基
    • 对于那些在 mercurial hg 工作的人,您需要在设置中启用 rebase 扩展。
    • 我喜欢这个答案 - 长期以来一直在寻找“追溯分支” - 并且有动力提供稍微更简洁的说明(除了原始说明之外)。
    • 我猜没有人喜欢我稍微干净一点的说明。这基本上等于说“不要被 hg update null 弄糊涂了”。 // 详细: hg update -r Parent-of-Base-of-Branch; hg 分支专有分支名称; hg ci -m ...; hg rebase -s Where-Branch-should-have-started -d Proper-Branch-Name // 虽然我做了 hg rebase -s ... -d 。 // 当我已经在那里时。
    【解决方案2】:

    不,分支名称是变更集的一部分(它实际上就像您添加到提交中的标签),这意味着变更集哈希取决于分支名称。

    因此,追溯更改它的唯一方法是重写历史记录(如果您将更改推送到其他地方则效果不佳,因为您必须重写每个有更改的存储库)。

    要重写历史,你可以使用例如 mq。

    【讨论】:

      【解决方案3】:

      不是一个完整的解决方案,但无需重写历史;您可以标记未命名分支中的最后一个更改集。如果你从不从这里重新分支,那么标签应该会出现。如果您确实需要重新分支,您可以在标记的变更集之后转到命名分支。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多