【问题标题】:Mercurial - Merging changes between forksMercurial - 合并分叉之间的更改
【发布时间】:2018-04-09 14:08:47
【问题描述】:

我在尝试将来自父级的更改合并到我正在处理的分支中时遇到了问题。以下是更详尽的描述:

有存储库 A。我将存储库 B 作为存储库 A 的一个分支。B 是与 A 完全不同的应用程序,但共享许多内部后端功能,因此至关重要的一件事是能够应用某些两个应用程序共有的常见更新和错误修复。

所以 B 已经开发了几个月,与 A 平行,当事情足够稳定以至于我决定开始从 A 中提取更改时。我将 A 添加为远程存储库,并从 A 中提取并合并各种提交主分支进入 B。

到目前为止一切都很好。应用程序 B 现在可以运行我想要从 A 获得的所有更新功能。

我在本地将这些更新提交给 B。当我尝试推送更新时,问题就来了。 Hg Workbench 通知我它正在中止,因为“推送会创建新的远程分支”。它列出的分支是 A 的旧开发分支。它们已合并到 A 中并在 A 的开发过程中关闭。

看起来正在发生的事情是,当我尝试推送 B 的更新版本时,它试图在 B 的存储库中重新创建所有这些旧的 A 分支,我绝对不想这样做。

我做错了吗?我应该如何将更改从 A 拉入 B,然后将更改推送到 B 而不会在此过程中破坏 B?

【问题讨论】:

    标签: merge mercurial repository tortoisehg


    【解决方案1】:

    您可能将所有内容从存储库 A 拉到存储库 B 中。现在,当您推送到 B 时,它会希望将您现在拥有的所有内容推送到 B 的远程副本,包括所有头你从 A 那里拉出来的。

    您只能推送某个版本,包括它的所有祖先,通过 hg push -rXXX 其中XXX 是您要推送的修订版。或者你可以推送某个分支。

    但是:当您从从 A 导入的另一个分支合并时,您也需要推送该分支,因为它是新变更集的祖先的一部分,因此您可能需要使用 hg push --force 无论如何什么,因为您可能有一个新分支 - 取决于您合并的内容。

    不过,您不需要推送完全不相关的变更集。

    【讨论】:

    • 所以我真正关心的是 A/default,但我得到了大量的 A/feature/#### 分支,它们是 A/default 的祖先。这是否意味着我无法避免将所有 A/feature/#### 分支添加到我的 repo 中?
    • 如果我从头开始重新开始,但强调只从 A/default 中提取更改?
    • 作为合并变更集的直接祖先的每个变更集都需要成为历史记录的一部分,因为它直接影响当前状态。因此,如果 A/default 的历史记录包含来自 A/feature/#### 的多个合并,那么这些合并需要成为历史记录的一部分。
    猜你喜欢
    • 2014-10-15
    • 1970-01-01
    • 2017-02-25
    • 2014-11-05
    • 1970-01-01
    • 1970-01-01
    • 2018-12-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多