【发布时间】:2010-03-03 17:39:27
【问题描述】:
我在 Mercurial 中应用了大型 MQ 补丁。发生的事情是我已经完成了 qrefresh 并在我的补丁中包含了我不想包含的文件。有没有办法在不手动编辑的情况下从我的补丁中删除对这些文件的更改?在这种情况下,如果我只是在没有 MQ 的情况下工作,我所要做的就是 hg revert。
【问题讨论】:
我在 Mercurial 中应用了大型 MQ 补丁。发生的事情是我已经完成了 qrefresh 并在我的补丁中包含了我不想包含的文件。有没有办法在不手动编辑的情况下从我的补丁中删除对这些文件的更改?在这种情况下,如果我只是在没有 MQ 的情况下工作,我所要做的就是 hg revert。
【问题讨论】:
应用补丁后:
hg qrefresh -X [file1] -X [file2] ... -X [fileN]
会取出file1到fileN的补丁。完成后,输入hg status 以验证文件现在被标记为已修改,因此不再是补丁的一部分。
【讨论】:
-X 开关必须位于每个文件名之前。所以要删除 foo 和 bar,请使用 hg qrefresh -X foo -X bar。
hg qrefresh -X '*'。您必须用' 包围* 字符,以防止shell 在mercurial 之前解释。
-X 和--exclude,使用了完整的文件名和glob,在引号中,没有它们,没有任何效果。 hg qdiff --stat 原样返回文件列表
我认为您可以使用将补丁设置为当前补丁(已应用并位于堆栈顶部),然后使用 hg forget 和 hg qrefresh。
当然hg forget 只是hg remove,不需要额外的选项来避免文件删除。
【讨论】:
执行此操作的最简单方法是对除您要删除的文件之外的所有文件执行hg qrefresh - 这会将更改从补丁中取出而不丢弃它们。
【讨论】: