如何从 MQ 存储库的修订历史中删除变更集?

How can one remove changesets from revision history of MQ repository?

我有一个 Mercurial 存储库。它有一个补丁队列(它本身是一个包含补丁的存储库)。不幸的是,我对 MQ 执行了太多难看的提交(使用 hg commit --mq 命令)。 如果我 运行 hg history --mq 命令,它将打印大量不必要的变更集,比如 A, B, B1, B2, B3, B4, C, D 。 我只想摆脱那些 B1、B2、B3 和 B4,但我不想删除最新的 C 和 D。只是那些中间变更集。 我怎样才能达到预期的效果?

假设后面的mq changeset之间没有冲突,就很简单了。

mq 方法是使用 hg qdelete PATCH-ID 并删除您想要查看的补丁。必须不应用补丁。

或者,您可以使用正常的 hg 方式来编辑您的 mq 存储库:

  • 取消应用所有 MQ 变更集:hg qpop --all
  • 编辑 .hg/patches/series 文件并删除您想要删除的补丁行
  • 检查所有剩余的补丁是否干净地应用,最好一个一个地完成,因此对每个补丁进行 hg qpush。如果有任何冲突,请立即修复。
  • 将更改提交到 .hg/patches
  • 中的 mq 存储库

如果您需要中间补丁之一,请检查 hg qfold 和朋友。