0

以下命令序列要求启用 Mercurial Queues 扩展,以及 Evolve 扩展(for hg amend, alias hg refresh)。

这种命令组合会弄乱现有的 Mercurial 队列,使与推送的补丁对应的提交过时,并创建一个内容完全相同的新提交。

这个错误在理论上很容易犯:只需输入hg ref而不是hg qref,但我最近在使用 Mercurial Queues 多年后才犯了这个错误。无论如何,我还没有想出一个干净的方法来解决这个问题并恢复原始状态。

请注意,hg rollback在我的示例中,一个简单的方法确实有效,但我不确定它是否适用于我的情况,因为我尝试了其他方法来解决这个问题。无论如何,hg rollback这不是一个人应该依赖的东西。总之,我如何撤消hg amend并取回我应用的 MQ 补丁?

#!/bin/sh                                                                                                                                                                

hg init test
cd test
echo "This is foo" >> foo
hg add
hg ci -m "Add foo"
hg init --mq
echo "Line 2 of foo" >> foo
hg qnew p
hg ci --mq -m "Add patch p"
hg ref


hg log -vG --hidden
@  changeset:   2:f7f038d3aab5
|  tag:         tip
|  parent:      0:9d3a95922194
|  user:        Faheem Mitha <faheem@faheem.info>
|  date:        Sun Mar 11 16:38:51 2018 +0530
|  files:       foo
|  description:
|  [mq]: p
|
|
| x  changeset:   1:e467a2433c7f
|/   tag:         p
|    tag:         qbase
|    tag:         qtip
|    user:        Faheem Mitha <faheem@faheem.info>
|    date:        Sun Mar 11 16:38:50 2018 +0530
|    obsolete:    rewritten using amend as 2:f7f038d3aab5 by Faheem Mitha <faheem@faheem.info> (at 2018-03-11 16:38 +0530)
|    obsolete:    rewritten by Faheem Mitha <faheem@faheem.info> as f7f038d3aab5 (at 2018-03-11 16:38 +0530)
|    files:       foo
|    description:
|    [mq]: p
|
|
o  changeset:   0:9d3a95922194
   tag:         qparent
   user:        Faheem Mitha <faheem@faheem.info>
   date:        Sun Mar 11 16:38:50 2018 +0530
   files:       foo
   description:
   Add foo
4

1 回答 1

1

这不是我从你的测试用例中得到的。我需要一个额外的

echo "Line 3" >> foo

在汞参考之前。此外,在这里对您的 mq 进行版本控制似乎无关紧要;我认为您可以删除hg init --mqandhg ci --mq行。

hg amend 真的应该阻止它。但是,如果您想手动修复问题,请编辑 .hg/patches/series 并将过时的哈希替换为后继哈希。(只要确保使用 20 字节的散列,如 eg 给出的那样hg log -T '{node}\n')。

警告:当我用你的测试用例和 qpopped 进行尝试时,有些东西神秘地没有淘汰旧头,它给出了一个奇怪的警告,指出当前目录不是头(尽管hg log -r 'head()'列出了它。)但至少你的队列回来了处于工作状态。

于 2018-03-14T17:30:23.220 回答