从代码库中恢复已删除的文件

20

我正在从SVN转换到GIT,有一个问题找不到答案。 我将描述我使用SVN与一些开源项目合作的常见情况。

  1. 检出代码
  2. 开始修改文件,进行更改以测试项目的工作方式。
  3. 在完成第2步之后,某些文件被大量修改,我无法回到原始状态。
  4. 我从磁盘中删除了修改后的文件"rm filename.cpp",运行命令"svn update",所有原始文件都重新回来了。

这一切在使用GIT时同样有效,除了第4步。我尝试执行“git pull”时,它表示项目是最新的,即使本地文件夹中缺少这些文件,我也无法获得原始文件。

在使用GIT时,第4步的正确命令是什么。 谢谢


1
可能是如何在Git中将文件还原到以前的状态?的重复问题。 - Saheel Godhane
4个回答

19

最简单的方法在git status的输出中提示:

git checkout -- file

文件名可以是一个已删除的文件名。这将恢复已删除的文件,而不影响其他文件。


好的,但是如果有10个文件我想要恢复,而且我不记得它们的名称怎么办? - Eugen
git status 会告诉你每个被修改/删除的文件的名称。 - madth3
1
如果您已经删除了一个文件夹,比如 /src/test,并且它下面有很多文件,那么您可以通过运行以下命令来恢复它们:git checkout -- src/test。 - user204069

17
尝试检查当前分支(或HEAD):
git checkout HEAD

或者如果你想把所有内容还原到最新提交的状态(警告: 这将永久性地删除所有未提交的更改!), 你也可以使用reset hard命令:

git reset --hard

这两个都不起作用。我删除了一些文件,然后进行checkout,它说有一些文件有D标志,但没有其他任何反应。如果我进行reset,它会说有一个我不需要的pull request,然后仍然没有其他反应。如果我进行pull,它会说文件是最新的,但是已删除的文件仍然丢失。 - Eugen
谢谢朋友,你的帮助救了我的一天! - Pawan Parashar

1
这是我会做的:
git reset HEAD git checkout --

0

在这种情况下,Git非常糟糕,我一直在努力解决它,令人难以置信。以下是我处理的方式:

  1. 将远程repo克隆到本地硬盘上与现有本地repo不同的某个位置
  2. 从新克隆的repo中复制已删除的文件/目录到现有的本地repo
  3. 如果需要,将更改提交到现有的本地repo,也可以推送到远程repo
  4. 删除新克隆的本地repo

为什么要完成这样一个简单的任务如此复杂和耗时,我无法理解...


现在,Git Zen:假设您只有本地存储库而没有远程存储库。您希望检索文件... - ljgww

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