gpt4 book ai didi

version-control - 如何退出 Mercurial 中的 merge ,然后与该分支重新 merge ?

转载 作者:行者123 更新时间:2023-12-01 23:11:09 25 4
gpt4 key购买 nike

我有两个分支,default 和 branch1。我们团队中的一个人错误地将 branch1 与 default 合并了。 branch1 中的内容尚未准备好与默认合并(它包含构建和部署环境的主要返工)。

我们用 'hg backout' 做了一个实验,退出合并(不确定这是正确的方法)。然后来自 branch1 的更改在默认情况下被删除,这很好 - 但我们不能与 branch1 重新合并。

我们应该如何解决这个问题?

最佳答案

这里有很多场景,您可能想要这样做,我会将每个场景设为标题,以便您找到适合您情况的场景。请注意,我仍在学习 Mercurial,如果我说的有误,使用错误的术语,可以做得更好等,我希望得到指点。

没有进一步的变化,不共享合并(没有推/拉)

程序员已经合并,但没有做任何其他事情,也没有以任何方式与任何人分享更改

在这种情况下,只需丢弃本地克隆,并从安全存储库中获取新的克隆。

合并之上的本地更改,未共享

程序员已经合并,并基于该合并继续工作。合并后的变更集应该保留,但合并本身应该被删除。更改(合并 + 后续更改集)尚未与任何人共享

在这种情况下,我将执行以下四种操作之一:

  • 尝试使用 REBASE 扩展,这会将变更集从一个位置移动到另一个位置。如果变更集基于合并引入的代码变更,则必须进行一些手动工作以协调差异。
  • 尝试使用 MQ 扩展将要保留的变更集拉入补丁队列,然后将它们推回不同的位置。但是,在基于合并
  • 的更改方面,这与 REBASE 扩展存在相同的问题。
  • 尝试使用 TRANSPLANT 扩展将更改从一个位置“复制”到另一个位置。尽管如此,仍然存在与前两个​​相同的问题。
  • 再次做这项工作,可能在差异工具的帮助下,在我想要丢弃的变更集中进行更改,然后在正确的位置重新进行更改。

  • 要摆脱合并变更集+所有以下变更集,有几个选项:
  • 在 MQ 扩展中使用 strip 命令
    hg strip <hash of merge changeset>
  • 克隆和拉取,并指定导致但不包括合并的变更集的散列。从本质上讲,通过从损坏的克隆中拉入新克隆来创建新克隆,并避免拉入您不想要的合并。
    hg clone damaged -r <hash of first parent> .
    hg pull damaged -r <hash of second parent>

  • 合并推给他人,控制克隆

    程序员已推送到主存储库,或推送到其他人,或从程序员存储库中拉取的某个人。但是,您(作为开发人员组)可以控制所有存储库,例如,您可以在完成更多工作之前与每个人联系和交谈

    在这种情况下,我会查看是否可以完成第 1 步或第 2 步,但可能需要在很多地方完成,因此这可能涉及很多工作。

    如果没有人根据合并变更集完成工作,我会使用步骤 1 或 2 进行清理,然后推送到主存储库,并要求每个人从主存储库获取新的克隆。

    合并推送,您无法控制克隆

    程序员推送了合并变更集,您不知道谁将拥有合并变更集。换句话说,如果你成功地从 根除它您的 存储库,仍然拥有它的人的杂散推送会将其带回来。

    忽略合并变更集并在两个分支中工作,就好像它从未发生过一样。这将留下一个悬垂的头。稍后,当您合并两个分支时,您可以对这个头进行空合并以摆脱它。
      M         <-- this is the one you want to disregard
    / \
    * *
    | |
    * *
    | |

    只需继续在两个分支中工作:
    |   |
    * *
    | M | <-- this is the one you want to disregard
    |/ \|
    * *
    | |
    * *
    | |

    然后你合并两者,你想要的真正合并:
      m
    / \
    * *
    | |
    * *
    | M | <-- this is the one you want to disregard
    |/ \|
    * *
    | |
    * *
    | |

    然后,您可以进行空合并以摆脱悬垂的头部。不幸的是,除了通过 TortoiseHg 之外,我不知道该怎么做。它有一个复选框,我可以在其中放弃其中一个分支的更改。

    使用 TortoiseHg,我会更新到我想要保留的合并(最上面的,小写的 m),然后选择并右键单击下面悬空的合并头,然后选中“放弃合并目标(其他)修订版的所有更改” :
    discard changes from target

    关于version-control - 如何退出 Mercurial 中的 merge ,然后与该分支重新 merge ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4152480/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com