我删除了一些文件。

我还没有承诺。

我想重置我的工作空间来恢复文件。

我做了一个git结帐。

但被删除的文件还是不见了。

git状态显示:

# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   deleted:    cc.properties
#   deleted:    store/README
#   deleted:    store/cc.properties
#

为什么不结帐。将工作空间重置为HEAD?


当前回答

以下是不同的案例,供大家参考:

如果没有提交删除,下面的命令将在工作树中恢复已删除的文件。

$ git checkout -- <file>

您可以使用下面的命令获得工作树中所有已删除文件的列表。

$ git ls-files --deleted

如果已提交删除,则查找发生删除的提交位置,然后从该提交中恢复文件。

#find the commit hash where it had this file deleted
$ git rev-list -n 1 HEAD -- <file>

它会给你一些类似c46e81aa403ecb8a0f7a323a358068345的东西,现在使用这个提交哈希和父操作符(^),如下所示:

$ git checkout <commit>^ -- <file>

例子:

$ git checkout c46e81aa403ecb8a0f7a323a358068345^ -- <file> 

如果您正在寻找要恢复的文件的路径,下面的命令将显示所有已删除文件的摘要。

$ git log --diff-filter=D --summary

如果你只想显示文件列表:

git log --diff-filter=D --summary | grep "delete mode"

其他回答

输出告诉您需要做什么。git重置HEAD cc.properties等。

这将取消rm操作。在此之后,再次运行git状态会告诉您需要执行git checkout——cc.properties来取回文件。

更新: 我的配置文件中有这个

$ git config alias.unstage
reset HEAD

我通常用它来取消舞台上的东西

如果您正在寻找已删除的目录。

 git checkout ./pathToDir/*

我碰巧将一些json文件从一个文件夹移动(而不是复制)到同一存储库中的另一个文件夹。然后我重命名了这些文件,并在新位置更改了一些内容。然而,我很快了解到,我没有复制和完全删除文件从以前的位置。

简单的解决方案:

git reset HEAD <oldfilepath_which_was_moved>
git restore <oldfilepath_which_was_moved>

对所有文件都这么做了,它们都回来了。

您还可以包含多个文件,以空格分隔。

git reset HEAD file_1_path file_2_path file_3_path

很容易修复,顺便说一下,这不会改变/删除新文件。

如果您已经安装ToroiseGIT,那么只需选择“恢复…”菜单项的父文件夹弹出菜单。

我也遇到了同样的问题,但上面的解决方案都不适合我。 我最后做的是: —创建同名的空文件 -将该文件与本地历史文件进行比较 -将历史记录复制到空文件。