我删除了一些文件。

我还没有承诺。

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

我做了一个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 checkout -- .

在你做出承诺之前。

您可能还希望删除尚未创建的已创建文件。你不想要他们。:

git reset -- .

对我来说,什么工作是git签出{SHA1的版本提交恢复}"{路径文件恢复}"

例如git校验5a6b3179e58edff9c90326b9a04284b02fd67bd0 "src-ui/views/includes/radar.pug"

(在我们想要文件进入的分支中执行)

该命令执行后,恢复的文件将存在于原始位置(需要提交)

由于您正在执行git签出,看起来您正在尝试将分支恢复到上次提交状态。

你可以通过git重置HEAD来实现这一点——很难

警告

这样做可能会删除所有最新的修改并取消您的修改,例如,您可能会丢失工作。这可能是你想要的,但请检查文件以确保。

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

这对我来说是最简单的方法:

git checkout HEAD~1 path/to/myfile.rb

我在这里找到的。


另一种方法也适用于我:

git reset HEAD path/to/myfile.rb
git restore path/to/myfile.rb