假设我在工作目录中进行了一些更改并意外标记了几个文件(包括一些修改后的文件)以供删除。如何取消删除文件而不会丢失我所做的更改?撤销Mercurial中的移除操作
回答
hg revert
我敢肯定水银甚至使得在默认情况下更改备份。
好吧,我知道恢复。由于我使用了“hg remove -Af”(即在下一次提交中而不是从磁盘中将文件从存储库中删除),我一直在寻找一种解决方案,只取消文件的标记以便保留在存储库中。 “hg revert”也将替换以前的版本。 我预计会有类似于“hg add”/“hg forget”的方式。 “hg forget”只是在下一次提交中将标记为添加的文件取消标记。 – Kostas 2010-02-02 12:00:39
AFAIK恢复是你的唯一选择去除 - 当然删除的帮助说看到恢复删除的东西(而你说的添加建议忘记作为oposite)。你应该得到.orig文件,但是你的更改在 – 2010-02-02 13:04:07
严重。我只是想让它从我不小心“忘记”的文件中删除“删除”标记。我不希望我的文件被修改。 如果我不小心加了,hg忘记解除它。相反是不正确的。如果我忘记一个文件,没有任何数量的hg add'ing会取消标记。 BOOOOOOO TERRIBLE UX。 – 2012-04-04 20:12:08
在您对jk的评论中,我检查了hg forget
。它似乎只是hg remove -Af
的一个快捷方式,这意味着这是hg add
的真正对立面。
接下来,如果您使用hg remove -Af
,那么您应该能够使用hg add
恢复(我刚刚尝试过,似乎工作)。
标记存储在.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
最后一个命令应显示删除文件之前的状态。
只是hg add
的文件。
我不知道为什么你会得到一些修改工作目录的答案。如果您不小心标记了一些要删除的文件,则可以使用添加进行撤消。
[email protected]:~/hgtest$ hg status --all
M another_file
C a_file
[email protected]:~/hgtest$ hg remove --after --force *
[email protected]:~/hgtest$ hg status --all
R a_file
R another_file
[email protected]:~/hgtest$ hg add *
[email protected]:~/hgtest$ hg status --all
M another_file
C a_file
这就是说,不hg remove
或曾经真正使用--force
。也试图养成使用hg forget
而不是hg remove --after
,
很确定这是正确的答案 - 并需要更多upvotes推到顶部。 – slim 2013-02-11 10:43:41
警告:在未经修改的文件上执行'hg remove [file]'将文件从文件系统中移除。在这种情况下,'hg add [file]'失败,并且将其添加回来必须执行'hg revert [file]'。 'hg add [file]'是在删除之前修改过的文件的正确答案。 – dinosaur 2014-10-28 20:15:21
这是真的。这就是为什么'忘记'总是一个更好的选择。将删除保留为旧的(非mercurial)'rm'。 – 2014-10-29 04:21:21
的习惯我有完全相同的问题。 hg add
与hg forget
相反(正好相反)。但是,尝试重新添加目录本身不起作用。相反,我必须在每个文件上使用hg add
:
hg st | egrep "^R" | sed -e "s/R //" | xargs hg add
希望有所帮助。请注意,就我而言,我没有任何理由想要删除。如果您有一定要删除的文件,请相应地调整grep。
如果该文件存在,(很可能你已经与hg forget
标记为删除或者如果已修改它,然后hg remove
d吧),做hg add [file]
与后最后一次提交之前所做的任何更改将其添加回忘记文件。
如果文件不存在(如果该文件未被修改,并且您使用hg remove
标记了要删除的文件),请执行hg revert [file]
以将其恢复到其在工作目录父级中的状态。
这个答案远远胜过最受欢迎的答案,因为它解释了为什么以及何时每个命令都可以工作,而不是仅仅放弃一个配方。 – 2015-07-16 08:50:19
- 1. 删除WebView的NSUndoManager的撤销操作
- 2. 使用Snackbar.Callback撤销删除操作
- 3. 审计撤销操作
- 4. 撤消Mercurial中的最后一个删除操作?
- 5. 在codemirror中操作撤销状态
- 6. 如何撤销在Mercurial中的添加/删除
- 7. Mercurial撤销推送到主分支
- 8. 撤销Google照片中的已撤销作品
- 9. 撤销迁移错误
- 10. 撤销TortoiseSVN中的修复移动
- 11. 撤销iOS证书撤销
- 12. 撤销SVN删除./* --force
- 13. 如何撤销SmartGit/Git中的提交操作
- 14. 如何在datagridview中实现撤销操作
- 15. 如何撤销中间文件删除
- 16. 删除/删除/撤销零件
- 17. 在CoreData中撤消操作
- 18. 如何取消正在进行的撤销/重做操作?
- 19. 我们可以撤销Mercurial推送的更改吗?
- 20. 在DataGridView上撤销已删除的行
- 21. 用撤销按钮移动Java ArrayList
- 22. 撤销AccuRev中的更新?
- 23. 撤消consecutives的ConvertTo操作
- 24. 什么响应者捕获撤销操作?
- 25. SPA与REST API,如何处理撤销操作
- 26. 撤销removeFromSuperview?
- 27. Windbg撤销zap
- 28. 撤销IBAction?
- 29. IdentityServer4 refresh_token撤销
- 30. 撤销ax.set_yticks([])
是的,除非你不告诉它,改变放在.orig文件 – 2010-02-01 10:16:30
我刚刚运行'hg恢复'在一个文件我间接删除与'hg mv'。它没有**保存我的更改,并且恢复到上次提交的副本。 – cesar 2011-09-23 02:43:44
这不是正确的答案。恢复改变目录的工作,这个问题是关于如何撤消“删除标记” – 2012-05-11 17:09:15