gpt4 book ai didi

mercurial - 如何在没有弃用的 qsave 的情况下对补丁队列中被拒绝的大块使用 mercurial merge 功能?

转载 作者:行者123 更新时间:2023-12-04 05:33:56 24 4
gpt4 key购买 nike

我有一个存储库,正在使用 mq 补丁队列进行未完成的更改。补丁队列也受版本控制。

假设我有 2 个补丁 p1 和 p2(按此顺序应用)。现在我对 p1 进行更改:

hg qnew p1
...
hg qnew p2
...
hg qref
hg com --mq -m"(Commit before reject)"
hg qpop p1
{make change}
hg qref
hg qpush -a

...并且 p2 无法应用。

现在的标准方法是手动应用被拒绝的大块头。一世
想使用类似 MqMergePatch 的东西这很好,并使用了合并
mercurial——但它基于不推荐使用的特性:
hg qsave // deprecated: use "hg rebase" instead

我的问题是:如何使用 Mercurial rebase ?

编辑

在看到存储库的日志后,我完全不喜欢 MqMergePatch 对它所做的事情。我使用补丁的主要目标是使存储库的历史记录干净,而不是散布无用的细节。

最佳答案

使用建议hg rebase是误导,我认为。 MqMergePatch页面说是对MqMerge的修改,这是一种在从其他地方提取的新变更集之上重新构建一系列补丁的技术。

但是,它涉及保存已应用的补丁队列的副本(实际上就是 hg qsave does ),并将保存的副本用作影响补丁队列 rebase 的 3 路合并的引用的一部分。在启用 rebase 扩展之前,我曾经自己这样做过。然后这只是在我想成为它的新父级的提示更改集之上重新设置第一个补丁的问题。

但这不是您想要的,因为您想要的基本上是在您更改的补丁之上重新构建补丁。但是,补丁队列是线性的,如果应用了补丁的变更集具有与补丁队列并行的其他子项,则您只能重新定位补丁:

--- A -------- patch1 --- patch2
\
\-- B

在上述情况下,补丁队列可以重新基于 Bhg rebase很容易(因此建议使用 hg rebase ),但这与您的情况无关。

解决您的情况

这是一个未保存的本地更改的应用补丁,它将与未应用的补丁冲突:
--- A --- patch1           <patch2>
\
\-- [changes]

通常我硬着头皮手动处理拒绝,因为它们通常很少。我发现如果我遇到太多拒绝而无法手动处理的情况,我可能一开始就没有正确地组织它们。

如果使用 qsave 的技术和 qpush -m等等对你来说比以下更可取,是 unlikely那个 qsave将很快被删除,即使它已被弃用。

如果我真的想利用三向合并工具,我将如何处理上述情况:

( TortoisHg 2.x 还没有让我们重新设置补丁队列,所以这是我有时做的完成重新设置导入的变体。)
  • 而不是 qrefresh , 使用 qnew使未保存的更改成为新补丁:
    --- A --- patch1 --- patch1b        <patch2>
  • 将这些补丁完成为常规变更集:
    --- A --- B --- C        <patch2>
  • 更新到 patch 的变更集将应用干净( B ),并应用补丁:
    --- A --- B --- patch2
    \
    \-- C
  • rebase patch2C以便使用 3 路合并来解决本地 patch2 之间的冲突和其他 C使用底座 B :

    (我必须在 TortoiseHg 2.x 中执行此操作,方法是在 rebase 之前完成 patch2,然后将其重新导入队列。)
    --- A --- B --- C --- patch2
  • 进口 BC再次作为补丁进入队列:
    --- A --- patch1 --- patch1b --- patch2
  • 流行patch2patch1b然后折叠 patch1b进入 patch1 (重命名为 patch1new ):
    --- A --- patch1new       <patch2>

  • 现在 patch2将干净地应用于 patch1new .

    关于mercurial - 如何在没有弃用的 qsave 的情况下对补丁队列中被拒绝的大块使用 mercurial merge 功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6948108/

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