以下命令序列要求启用Mercurial Queues exension,以及Evolve扩展(对于hg amend
,别名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
答案 0 :(得分:1)
这不是我的测试用例。我还需要一个
echo "Line 3" >> foo
在hg ref之前。此外,版本控制你的mq似乎无关紧要;我认为您可以删除hg init --mq
和hg ci --mq
行。
hg修正确实应该阻止它。但是,如果您想手动修复,请编辑.hg / patches / series并使用后继哈希替换过时的哈希。 (只需确保使用20字节的哈希值,例如hg log -T '{node}\n'
)。
警告:当我尝试使用你的测试用例和qpopped时,旧的头部神秘地取消了它,它给出了一个奇怪的警告:当前目录不是头部(尽管列出了hg log -r 'head()'
。)但至少你让你的队列回到了工作状态。