如何在VS Code/Git中撤销“放弃所有更改”?

83
我害怕我已经知道答案了,但还是问一下... 我在VS Code(OSX)中意外点击了“放弃所有更改”,现在一个月的工作消失了。完全没了。问题是,我没有正确设置GIT,所以我还没有进行任何提交。有没有办法可以找回我的工作?现在我的工作目录就像是空的一样。
[编辑] 我应该澄清一下,控制台日志显示它执行了“git clean -f -q”,这意味着文件已经丢失了。但我想知道VSCode是否有备份、历史记录或缓存...或其他任何东西。我很绝望。。

可能是Git恢复未提交的更改的重复问题。 - 1615903
同时,https://dev59.com/3Ww05IYBdhLWcg3wmC0o - 1615903
可能是意外回滚到主分支,丢失未提交的更改的重复问题。 - PatrickSteele
1
另一个提示(虽然现在对你没有帮助,但将来会有所帮助):【尽早提交,经常提交】(https://blog.codinghorror.com/check-in-early-check-in-often/)。 - PatrickSteele
未来参考,请注意,除非您使用的是 PyCharm,否则只需通过 git 废弃更改并撤消操作来打开文件。 - ElSheikh
https://github.com/gitgitgadget/git/issues/1597 - undefined
19个回答

176
我只知道一种解决这个问题的方法。您必须记住每个更改过的文件名。 步骤1:在VSC上键入Ctrl + Shift + P 步骤2:选择“本地历史记录:查找要还原的条目”选项 步骤3:找到想要恢复的文件 步骤4:选择保存该文件的时间 步骤5:复制文件内容并还原它 输入图像描述 输入图像描述 输入图像描述

3
谢谢!你救了我的一天。我正在使用IntelliJ,每个文件夹还有“本地历史记录”菜单。 - ilan weissberg
3
我认为,VSC中最重要的功能之一是需要注意的。 - Dror Bar
4
救了我的命! - Mohamad amin Moslemi
2
你真的救了我的一天,还有一个月的工作。谢谢。 - Rayyan Alam
2
省了一天的工作时间!谢谢。 - zarathoustra
显示剩余5条评论

74

在不小心按错文件上的“放弃更改”按钮后,我最终来到了这里。 由于找不到恢复的方法,我尝试在那个文件中使用简单的CMD+Z (CTRL+Z) 操作,结果一切都恢复了,所以不要放弃,也试试看吧 :) 感到非常满意。


很高兴听到这个消息,但它在Ubuntu 18上没有起作用。如果有人在Ubuntu 18上成功了,请提供解决方案(这对我下次可能会有用:P)。 - GD- Ganesh Deshmukh
虽然如果立即发生的话这样做是可行的,但对于一段时间前被还原并且 Visual Studio Code 已经关闭的文件来说,这显然不适用。在这种情况下,本地历史记录是一个可行的选择。 - Studocwho

38

太可怕了,但我有些运气!

我成功恢复了文件,当时我点击了放弃所有更改

毫无疑问,git没有恢复这些丢失更改的选项,但是我们的系统(和VScode)有。

我如何恢复这些更改?

  1. 我只是在VSCode中重新打开了那些文件,使用Ctrl+P
  2. 一旦打开,然后我按下Ctrl+Z尝试撤消我的更改,结果我的系统剪贴板帮我恢复了所有确切的更改。

如果您正在处理一个新文件,它现在已被删除且没有痕迹。仍然可以通过按Ctrl+P来恢复该文件,因为该文件已在VSCode中打开,并带有标签(已删除)

简而言之,只要您没有重启VSCode,就可以恢复更改。


18

如果您无法使用Ctrl+Z或Command+Z来撤消操作,也无法在垃圾箱/回收站中找到文件,则您可以尝试使用文件恢复软件进行还原。我曾经使用Piriform的免费版Recuva成功地恢复了我不小心删除的更改。


2
这应该是被接受的答案。你节省了我一整天的工作时间! - pax
请注意,使用Recuva恢复的文件可能与我的情况下的扩展名不同,例如file.cs~RF1d321e55.TMP - MiraTech
我同意PaxForce的观点!这个简直节省了我很多时间!谢谢Eric! - Travis Grannan
Recuva刚刚在这里拯救了我,谢谢你让我们记住这一点。 - Tamer Durgun

13

摘要:您的工作丢失了,无法恢复。

在VS Code中,“全部清除”(放弃所有更改)选项实际上执行以下操作:

git clean -fd
git checkout -- .

因此,git clean -fd 是否可以撤消丢弃未提交的更改取决于 Git。不幸的是,由于这些更改尚未提交,它们并没有在 Git 中保存,因此在执行 git clean -fd 后,Git 将强制删除所有未跟踪的文件。

执行命令 git checkout -- . 后,Git 将检出所有在 Git 中被修改的文件,作为上次提交的版本。


5
这句话的意思是什么?我一点也不理解,有人能解释一下吗?是否有方法可以撤销未提交的更改? - Shamseer Ahammed
8
我强烈不赞同这个被接受的答案。正如roslyn和EFFG所说的那样,您可以在VS Code中使用Ctrl + Z或在回收站中找回这些文件。 - Thomas Vuillemin
1
@ThomasVuillemin 即使文件可能在回收站中,问题与git有关。事实是,这个操作本身是不可逆的,很遗憾。 - user1026622
1
@user1026622 嗯,问题就在这里:阅读问题时似乎不仅涉及到git,还涉及到VS Code,而且对两者进行谷歌搜索会导致你来到这里,尽管还有其他关于git的问题。即使git操作是不可逆的,在使用VS Code的特定情况下,也有方法可以撤销它。我认为针对这个具体问题的答案应该反映出这一点。 - Thomas Vuillemin
1
我遇到了5000个更改的问题,而且VSCode拒绝放弃这些更改。使用这些命令解决了问题! - Yasser Jarouf
显示剩余2条评论

7
在那个文件中,使用CMD+Z / CTRL+Z (即撤消快捷键)可以恢复,即使你更改了分支或关闭了文件。

4
我现在在GitHub Desktop客户端上做了同样的事情。 我以为它会撤消未提交的内容,但它决定全部还原。 很幸运,我检查了回收站并发现所有被丢弃的文件都在那里(连同一些不想要的文件也在其中,这些文件是我首先想要删除的,然后小心地删除了它们,然后首先恢复这些文件)。 不确定MacOS是否也会将它们移动到“垃圾箱”。请再次检查,您可能很幸运 ;)

你刚刚帮我省了点麻烦。非常感谢你。在MacOS的垃圾箱里找到了它。 - onyeka

2
请查看以下屏幕截图,您可以放弃所有更改,也可以逐个进行更改。

enter image description here


为什么没有人意识到它有多容易。 - erw13n

2

1
我不小心丢弃了一个新文件的更改,但是在选择列表中无法通过 cmd+p 找到它。最终我找回了这个新文件,但只有在另一个文件保留该文件路径引用的情况下才有效。我通过点击 import xxx from ./xxx/losted_File.js 使用了另一个文件的路径引用,然后该文件重新出现并被删除,我保存了已删除的文件,这样就找回了文件。

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