假设我在工作目录中进行了一些更改,并意外标记了几个文件(包括一些修改过的文件)以供删除。如何在不丢失我所做的更改的情况下取消标记要删除的文件?
答案 0 :(得分:38)
只需hg add
个文件。
我不知道为什么你会得到许多修改工作目录的答案。如果您不小心标记了某些要删除的文件,可以使用add来撤消它。
ry4an@four:~/hgtest$ hg status --all
M another_file
C a_file
ry4an@four:~/hgtest$ hg remove --after --force *
ry4an@four:~/hgtest$ hg status --all
R a_file
R another_file
ry4an@four:~/hgtest$ hg add *
ry4an@four:~/hgtest$ hg status --all
M another_file
C a_file
也就是说,不要将--force
与hg remove
一起使用,或者永远不要使用hg forget
。同时尝试养成使用hg remove --after
代替{{1}},
答案 1 :(得分:22)
答案 2 :(得分:16)
hg revert
我非常确定Mercurial默认会备份您的更改。
答案 3 :(得分:6)
如果该文件存在,(可能是您已使用hg forget
标记了该文件,或者如果您已将其修改为hg remove
d),请执行{{1}使用在最后一次提交之后和忘记文件之前所做的任何更改将其添加回来。
如果该文件不存在(可能是文件未经修改且您已使用hg add [file]
标记要删除的文件),请执行hg remove
将其恢复为其中的状态工作目录的父级。
答案 4 :(得分:4)
我遇到了完全相同的问题。 hg add
与hg forget
相反(正好相反)。但是,尝试重新添加目录本身不起作用。相反,我必须在每个文件上使用hg add
:
hg st | egrep "^R" | sed -e "s/R //" | xargs hg add
希望有所帮助。请注意,在我的情况下,我没有合法的删除。如果您有绝对想要删除的文件,请相应地调整grep。
答案 5 :(得分:3)
在您对jk发表评论后,我检查了hg forget
。它似乎只是hg remove -Af
的捷径,这意味着这是hg add
的真正对立面。
在此之后,如果您使用了hg remove -Af
,那么您应该可以使用hg add
还原它(我只是尝试了它,似乎有效)。
答案 6 :(得分:2)
标记存储在.hg / dirstate文件中。在发出hg remove -Af
之前,我需要做的就是获得一个。它可能看起来像这样(未经测试):
hg clone bad-repo orig-repo
cp orig-repo/.hg/dirstate bad-repo/.hg/dirstate
cd bad-repo
hg status
最后一个命令应该在删除文件之前显示状态。