Mercurial:如何从中断的"qpop -a"中恢复?

mst*_*rap 12 mercurial mercurial-queue

我已经在队列中导入了几个修订版并试图将它们全部弹出.不幸的是,根据访问同一存储库的其他一些Mercurial客户端,hg qpop -a未成功完成:

> hg qpop -a
popping 115.diff
popping 114.diff
popping 113.diff
popping 112.diff
popping 111.diff
abort: The process cannot access the file because it is being used by
another process
C:\Program Files (x86)\Mercurial\library.zip\mercurial\dispatch.py:217:
DeprecationWarning: use lock.release instead of del lock
Run Code Online (Sandbox Code Playgroud)

现在我再也无法推回补丁了.Mercurial总是抱怨"未知节点":

> hg qpush -a
mq status file refers to unknown node b6fb614866f1
abort: working directory revision is not qtip
Run Code Online (Sandbox Code Playgroud)

这意味着什么以及如何解决这个问题?

Tim*_*gan 19

这听起来像你的手术失败了.hg很久以前就向邮件列表报告过类似的问题(链接).您应该阅读Andreas Wuest的这篇博文,其中介绍了恢复过程.

它基本归结为:

$ > .hg/patches/status          # force mq to think no patches are applied
$ hg debugrebuildstate -r tip   # rebuild your working copy
Run Code Online (Sandbox Code Playgroud)

这不会破坏您的修补程序队列,也不会丢失任何不属于修补程序的工作副本更改.但是,您需要仔细检查(并修复)文件版本才能返回到干净的工作副本.

  • 对于使用多个修补程序队列(hg qq)的任何人,您必须清除任何修补程序目录损坏的状态文件,例如"> .hg/patches-default/status" (2认同)