我删除了一些文件。

我还没有承诺。

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

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


当前回答

我碰巧将一些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

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

其他回答

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

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

$ 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 ls-files -z -d | xargs -0 git checkout --

自动地一次性恢复所有的阶段性删除,而不指定每一个路径:

git status | grep 'deleted:' | awk '{print $2}' | xargs git checkout --

只需将git checkout path/to/file-I-want-to-bring-back.txt

如果你想一次性恢复所有文件

记住使用句点,因为它告诉git抓取所有的文件。

这个命令将重置头部并取消所有的更改:

$ git reset HEAD . 

然后运行该命令恢复所有文件:

$ git checkout .

然后做一个git状态,你会得到:

$ git status
On branch master
Your branch is up-to-date with 'origin/master'.

I had the same problem and none of the answers here I tried worked for me either. I am using Intellij and I had checked out a new branch git checkout -b minimalExample to create a "minimal example" on the new branch of some issue by deleting a bunch of files and modifying a bunch of others in the project. Unfortunately, even though I didn't commit any of the changes on the new "minimal example" branch, when I checked out my "original" branch again all of the changes and deletions from the "minimal example" branch had happened in the "original" branch too (or so it appeared). According to git status the deleted files were just gone from both branches.

Fortunately, even though Intellij had warned me "deleting these files may not be fully recoverable", I was able to restore them (on the minimal example branch from which they had actually been deleted) by right-clicking on the project and selecting Local History > Show History (and then Restore on the most recent history item I wanted). After Intellij restored the files in the "minimal example" branch, I pushed the branch to origin. Then I switched back to my "original" local branch and ran git pull origin minimalExample to get them back in the "original" branch too.