在 Git 存储库中恢复已删除的文件夹

Restore a deleted folder in a Git repo

我删除了一个文件夹中的所有内容,但该文件夹是空的。我的远程仓库中还有一份副本。但是,当我执行 git pull 时,它并没有放回已删除的文件,难道不应该这样做吗?

所以我做了一些研究,发现您可以通过以下方式还原文件 git checkout <revision> -- <name of file>

但这只适用于文件。

如何检索目录中的所有文件?

如果您不指定特定文件,您应该能够提取特定提交的全部内容。像:git checkout 264794319e9695ba843cd6(假设哈希让你的所有文件都处于正确的状态)。

pull 不恢复文件的原因是 git 将您的删除视为最近的更改,将其应用在您正在提取的任何内容之上。

(我建议在新分支中进行试验。)

如果您尚未提交更改,您可以还原内容或目录:

git checkout -- removed_directory

如果您想还原所有更改,请执行以下操作:

git reset --hard HEAD

您可以对文件执行的所有操作,也可以对文件夹执行。

另请注意Find and restore a deleted file in a Git repository


文件已从工作树中删除但尚未提交:

如果您还没有为您的更改编制索引(git add),您可以还原目录的内容:

git checkout -- path/to/folder

如果删除已经编入索引,您应该先重置它:

git reset -- path/to/folder
git checkout -- path/to/folder


恢复完整的工作树(不是单个文件夹),但丢失所有未提交的更改

git reset --hard HEAD


在过去的某个提交中删除文件时:

找到影响给定路径的最后一次提交。由于该文件不在 HEAD 提交中,因此此提交一定已将其删除。

git rev-list -n 1 HEAD -- <file_path>

然后使用脱字符号 (^) 签出之前提交时的版本:

git checkout <deleting_commit>^ -- <file_path>


从远程提交恢复完整的工作树

git reset --hard <revision> 

对于未提交的删除,就这么简单:

git 重置 HEAD rel/path/to/deleted/directory/*

唯一对我有用的是检出另一个文件夹中的存储库。假设当前 repo 在 /home/me/current 中。

然后我做了

git clone /home/me/current /home/me/temp

这会在 /home/me/temp

中创建一个单独的 repo 克隆

我现在可以去 /home/me/temp 做我想做的事了。例如

git reset --hard commit-hash-before-delete

现在可以把删除的文件夹复制回来了

cp -r /home/me/temp/some/deleted/folder /home/me/current/some/deleted/folder

并删除临时文件夹

rm -rf /home/me/temp

例子

git checkout -- some/deleted/folder
git checkout -- some/deleted/folder/*

不工作

$ git checkout -- some/deleted/folder/*
zsh: no matches found: some/deleted/folder/*
$ git checkout -- some/deleted/folder
error: pathspec 'some/deleted/folder' did not match any file(s) known to git.

其他例子如

git reset --hard HEAD

破坏性不仅仅是删除的文件。任何其他更改也将丢失。

同样

git reset --hard some-commit

将在 some-commit

之后丢失任何提交

从 git 2.24.0 开始,有一个实验性的新 git 命令:git restore

git restore --staged some/deleted/folder

您可以使用 git 还原来还原文件或文件夹。

git restore --source master~1 "PATH_IN_YOUR_REPO"

在这里,master~1 将您的文件夹从您的 master 分支恢复为“1”版本。

来源:https://git-scm.com/docs/git-restore

如果您只是想恢复已删除的文件夹,并且在删除后还有其他提交,那么您也可以直接转到 github.com 上的项目。

从 github.com,转到包含您的文件夹的最后一次提交。您应该看到提交消息,并且在右侧有一个标有“浏览文件”的按钮。单击此按钮将带您到该提交阶段的所有文件。

您可以从那里克隆代码或将代码下载为 zip。

对我来说,由于不相关的问题,我暂时删除了一个文件夹。我没有尝试从备份中恢复它,而是 运行 git restore folder/ 并将其恢复到 b运行ch 最初的状态。

如果您必须在没有 Git 命令的情况下进行恢复,请按照以下步骤进行操作

如果你有 Github 桌面它会让事情变得简单

如果没有,请安装并登录

  1. 转到文件

  2. 克隆存储库

  3. Select 存储你的 Repo

  4. 点击历史

  1. 右键单击用于删除的 Commit Folder/File

  1. Select 还原提交中的更改 选项

  2. 现在只需点击 Push Origin

  1. 一切就绪!您已恢复已删除的 File/Folder 您可以在您的存储库中查看它