在Mercurial中如何撤销最后一次addremove操作?

8

我输入了

$ hg addremove

但后来我意识到一些文件不应该作为提交的一部分。我本应该将这些文件添加到 .hgignore 中,在此之后运行 addremove 命令并提交更改。
有没有办法修复这个问题?
2个回答

16
如果您还没有提交,只需使用hg forget fileToForget或使用Tortoise删除文件。
如果您已经提交,并且不介意将这些文件作为历史记录的一部分,请先忘记它们,然后再次提交。
如果您不希望它们成为存储库历史记录的一部分,并且如果提交它们是您执行的最后一个操作,您可以尝试回滚(使用hg rollback或在Tortoise中转到恢复菜单)。您必须忘记文件,然后再次提交。
如果您正在处理过多的文件,则可以尝试通过获取所有已添加文件的列表,忘记它们,修改您的.hgignore文件,然后再次执行addremove任务。
以下是在没有进行提交的情况下使用PowerShell执行第一步的示例:
hg status --added --no-status | foreach-object {hg forget $_};

7
在Linux系统下,输入命令hg status --added --no-status | xargs hg forget可以实现对已添加但未提交的文件进行取消跟踪的操作。 - Daniel Sokolowski
尝试使用另一个答案中的代码 hg forget "set:added()",这对我很有效。 - Daniel Sokolowski
@DanielSokolowski 如果文件名中有空格,那么这种方法就行不通了 - 使用 hg status --added --no-status | xargs -d '\n' hg forget 代替。 - Eborbob

-1

如果您想撤销一个还未提交的addremove操作,只需运行以下命令:

$ hg revert --all

3
假设除了“addremove”的影响之外,没有进行任何其他更改。 - Edward
你是对的 - 我假设“addremove”是你想撤销的唯一命令。 - Alex
3
这可能是危险的,就像@Edward提到的那样。使用此命令的人将会失去所有的工作区更改。“hg forget”是正确的方法。请参阅@CedricRup的答案。 - user

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接