Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mercurial (怎么)我能把它拔出来吗_Mercurial - Fatal编程技术网

Mercurial (怎么)我能把它拔出来吗

Mercurial (怎么)我能把它拔出来吗,mercurial,Mercurial,我的修订图如下所示: F | E |\ | | C | | D | | B | | | |/ | A 我想把从B到F的所有提交折叠成一个。A不是我的,我不想碰它。我希望最后有: X | A 这可能吗?我尝试了各种折叠和重设基础命令,但未能实现这一点。您可以通过修补程序队列的扩展来实现这一点。您将需要删除合并更改集(因为我认为您不能qimporta merge)并重新排序修补程序(这可能需要手动合并修补程序文件) hg qimport--rev F--name F hg qpop hg str

我的修订图如下所示:

F
|
E
|\
| |
C |
| D
| |
B |
| |
|/
|
A
我想把从B到F的所有提交折叠成一个。A不是我的,我不想碰它。我希望最后有:

X
|
A

这可能吗?我尝试了各种折叠和重设基础命令,但未能实现这一点。

您可以通过修补程序队列的扩展来实现这一点。您将需要删除合并更改集(因为我认为您不能
qimport
a merge)并重新排序修补程序(这可能需要手动合并修补程序文件)

  • hg qimport--rev F--name F
  • hg qpop
  • hg strip-r tip
    ——这将删除合并变更集
  • hg qimport-rc-nc
  • hg qpop
  • hg qimport-rb-nb
  • hg qpop
  • hg qimport-rd-nd
    ——现在补丁队列中有了所有4个更改(D、B、C、F)
  • 此时,您可以
    hg qpush--all
    应用所有修补程序,并且需要解决导致被拒绝修补程序的所有冲突。这是手动重做合并变更集
    E
    以前完成的工作。通过编辑和
    hg qref
    命令完成后,
    qpop
    除了
    D
    之外的所有补丁

  • hg qfold B C F
    ——这将把B、C和F补丁合并到补丁D中
  • hg qfin D
    ——这将把补丁D转换成最终的变更集
  • 还有几点注意:

    • 像往常一样,在开始之前备份您的工作(文件夹的副本就可以了)。您还可以在完成这些步骤后使用diff工具来比较原始结果和结果,以确保不会遗漏任何内容
    • 如果您已将这些变更集推送到另一个回购协议,您将需要在那里删除它们(使用
      hg strip
      或将其阶段更改为
      secret
    • 如果合并变更集
      E
      做了大量工作(即B+C和D之间存在冲突),则9之间的额外步骤。和10。由于您的典型合并工具不可用,因此将非常混乱


    接下来我要问你的问题是:为什么?你希望完成什么?使用较小的变更集进行分支和合并是DVCS的标准操作过程。再做几次更改后,所有这些更改都将滚动到历史记录中,再也不会出现。担心一个完美的历史图表真的没有必要

    谢谢你的回答,当一切都是线性的时候,我终于成功地使用了rebase(从D到C)+崩溃。我在尝试使用mq时遇到的“问题”与我以前尝试rebase时遇到的问题相同,即提交是“不可变的”。一旦我了解了新的“阶段”特性(以及如何更改阶段),我就可以重新设置基础了。我的更改并不是真正的“公开”,只是我在使用克隆进行编辑之前备份了repo(因此更改仅在备份中“发布”)。至于“为什么”:B和C是代码修复,D是单元测试。我想编写测试,并看到它在没有修复的情况下失败。分支不是我通常的过程,它可以被视为以正确的顺序正确进行TDD的失败。此外,这些变更集很小,我想为发布提供一个不混乱的东西(我认为这是更传统的,使用个人提交作为保存/检查点)。很高兴你找到了它。我问这个问题主要是因为我见过开发人员非常专注于线性历史,看着它变得混乱(丢失历史和重复更改)。你解释的用例对我来说很有意义!快乐编码<代码>:)我终于有时间测试mq解决方案了。这也行得通,所以我接受了答案。我必须说,使用rebase/collaspe要简单得多,但对于像我这样没有经验的人来说:)COLLASE还允许我重新描述新的提交(但我想这也可以通过mq实现)。