【问题标题】:Mercurial: Pushing a changeset without its ancestorMercurial:在没有祖先的情况下推送变更集
【发布时间】:2011-11-16 07:58:21
【问题描述】:

我有一个来自另一个存储库的“默认”分支。
我在“Mytask”分支中有我的工作。

完成工作后,我从远程存储库中提取修订版 7。我从本地变更集 6 与 7 合并并提交到 8。

           Rev  Branch

    *      8    Default
    |\ 
    * \    7    Default
    |  |
    |  *   6    Mytask
    |  | 
    |  *   5    Mytask
    |  |
    *  |   4    Default
    |  |
    * /    3    Default
    |/
    *      2    Default
    |
    *      1    Default

有谁知道是否可以只将修订版 8 推送到远程存储库,而无需同时推送带有变更集 5 和 6 的 Mytask 分支?

欢迎任何反馈!

【问题讨论】:

  • 请注意,您不是在推动“修订”,即。不是代码的快照,您正在推送变更集,其中包含对代码的更改。因此,如果可能,推送 only 变更集 8 不会推送您在变更集 5 和 6 中所做的更改。

标签: mercurial


【解决方案1】:

看看这个问题的答案 about squashing commits。在这种情况下,挤压是关键词。

有一个collapse extension 看起来像您想要做的事情以及该问题的其他链接。

【讨论】:

    【解决方案2】:

    根据我对您的问题的理解,感觉就像您希望远程存储库的状态与本地存储库的状态相同。此外,您不需要额外的分支,您需要线性历史记录和单个提交。

    让我们先看两件事,mergerebase

    最初你克隆了 stable,你提交了自己的变更集 xy,你从远程存储库中提取了变更集 abc。现在你的历史看起来像这样。

    stable -> a -> b -> c
            \
             \-> x -> y
    

    合并

    您希望您的存储库处于这样的状态,而不是您希望有一个单独的头部。你选择了合并。你做了hg up -r bhg merge -r y,解决了合并冲突(如果存在)。现在你的历史看起来像这样。

     stable -> a -> b -> c -> d
            \             /
             \-> x -> y -/
    

    现在你有了一个新的提交d,它是一个合并提交。更新到 d 后,您的 repo 的当前状态包含来自两个父分支的更改。

    变基

    Rebase 是 Mercurial 中的一个扩展,您可以通过在 .hgrc 中添加一行来轻松使用它。让我们看看当你对我们拥有的初始状态执行hg rebase -s x -d c 时会发生什么。您的历史记录如下所示。

    stable -> a -> b -> c -> x -> y
    

    在这种情况下,您有一个线性历史记录,并且您的变更集 xy 都在 stable 分支上。

    结论

    人们倾向于使用 rebasemerge 的一个重要原因,以便他们可以保持线性历史记录,这有助于与其他存储库共享更改。

    在您的情况下,如果合并提交没有子级,您可以通过 hg rollbackhg strip 撤消合并提交。如果是孩子,你必须在yrebase 他们,然后strip 合并提交,然后rebasexc 的整个链。

    从变基部分(上图)中的 DAG,您可以轻松推送 xy。如果你想要一个单一的提交,你可以使用histedit 扩展或fold 命令,它是evolve 的一部分,它们都可以将这两个提交折叠/合并/加入/挤压/折叠成一个单一的提交,你的生成的历史将是这样的。

    stable -> a -> b -> c -> z
    

    其中z 包含来自xy 变更集的更改。

    相关链接

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-20
      • 2011-06-19
      • 1970-01-01
      • 1970-01-01
      • 2022-11-30
      相关资源
      最近更新 更多