Git - 如何撤销未暂存文件的检出并丢弃本地更改

202

我在本地工作树中使用git checkout意外地丢弃了文件的更改。这些文件此时没有被暂存。有可能“撤销”此操作吗?


不,我们不能。但是如果您正在使用 Eclipse,我们可以检查 Team-->Local History。 - USM
17个回答

2

伙计,

假设你和我一样非常幸运,回到你的编辑器并执行撤销操作(Mac上是command + Z),你应该能在文件中看到丢失的内容。希望这对你有所帮助。当然,这只适用于已经存在的文件。


2

我刚刚遇到了这个问题,我查看了一个包含数小时工作的整个文件夹!幸运的是,我发现我的IDE Netbeans保留了每个文件的历史记录,这使我能够恢复99%的东西,尽管我需要手动修复一些东西。

最初的回答:


1

如果您正在使用Intellij IDE,则可以撤消此操作。

  1. 在项目资源管理器中右键单击要获取丢失更改的文件。
  2. 本地历史记录 -> 显示历史记录
  3. 在左窗格中,您可以看到不同的时间戳选择这些时间戳
  4. 更改将显示在右侧。

1
如果您在打开终端/cmd提示符并使用了任何显示未暂存更改的git命令(例如diffadd -pcheckout -p等),并且自那以后没有关闭终端/cmd提示符,则如果您向上滚动到运行这些前述git命令的位置,您会发现未暂存的更改仍然可用。

你可以更好地解释如何执行以下操作:将diff输出复制到文本文件中,然后运行git apply --reject --whitespace=fix <包含diff输出的文件名> - 12431234123412341234123

1
在像PhpStorm,Webstorm和Pycharm这样的JetBrains IDE中,您可以右键单击每个文件或文件夹,然后选择本地历史记录 > 显示历史记录。
这将打开文件的本地历史记录视图,并在左窗格中列出所有最近的更改。
您可以右键单击最后一次更改并还原。

1
为我节省了几个小时 - 只需查看整个项目文件夹,对我很有效。 - ProgrammerFL23

0

-1

也许你的更改并没有丢失。检查 "git reflog"

我引用下面的文章:

"基本上,你在 Git 中执行的每个存储数据的操作,都可以在 reflog 中找到它。 Git 非常努力地不丢失你的数据,因此,如果出现某些原因导致你认为数据丢失了,很有可能你可以使用 git reflog 找回它们"

详见:

http://gitready.com/intermediate/2009/02/09/reflog-your-safety-net.html


3
别抱太大希望——只有在你以有意义的方式使用git时,获取reflog才有帮助。如果你只是编辑文件,然后通过git checkout放弃更改,那么git从来没有机会记录这些操作。 - Bob Gilmore
1
我给你点赞。我认为值得提一下 git reflog,因为当我在搜索如何撤销 git checkout HEAD . 时,我发现了这个答案。我本来想输入 git reset HEAD . 的,但是我刚刚执行了 git reset --soft HEAD~1,并不知道 git reflog,所以我能够找回我所做的工作 :) - Russell England
1
不幸的是,git checkout <revision>和git checkout <path>是两个完全不同且无关的命令。前者保留本地更改,而后者则不保留。 - Lake

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