还原 Git 回购中已删除的文件夹

我已经删除了一个文件夹中的所有内容,该文件夹是空的。我的远程回收系统里还有一份。但是当我做了 git pull它没有把删除的文件是不是应该这样做呢?

所以我做了一些研究,发现你可以恢复一个文件 git checkout <revision> -- <name of file>

但那只适用于文件。

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

135096 次浏览

如果不指定特定的文件,应该能够获取特定提交的完整内容。比如: git checkout 264794319e9695ba843cd6(假设 hash 的所有文件都处于正确的状态)。

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

(我建议在一个新的分公司做实验。)

如果您还没有提交您的更改,您可以恢复内容或目录:

git checkout -- removed_directory

如果要恢复所有更改,请:

git reset --hard HEAD

你可以用一个文件做任何事情,你也可以用一个文件夹做任何事情。

还要注意 在 Git 存储库中查找并恢复已删除的文件


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

如果你还没有索引(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/delete/目录/*

唯一对我有效的办法就是查看另一个文件夹里的回购协议。假设当前的回购是在 /home/me/current

然后我做到了

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

这使得在 /home/me/temp中的回购单独克隆

我现在可以去 /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 恢复

git restore --staged some/deleted/folder

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

git restore --source master~1 "PATH_IN_YOUR_REPO"

在这里,主 ~ 1将您的文件夹从主分支恢复到“1”修订版。

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

如果你只是想恢复一个被删除的文件夹,并且在删除之后还有其他的提交,那么你也可以直接登录 github.com 进入你的项目。

从 github.com 转到最后一个提交文件夹。您应该会看到提交消息,右边有一个标签为“ BrowseFiles”的按钮。单击这个命令将带您到达提交阶段的所有文件。

从那里你可以克隆代码或者只是下载一个压缩包的代码。

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

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

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

如果没有,那么安装并登录

  1. 转到文件

  2. 克隆仓库

  3. 选择 Repository your Repo

  4. 点击历史

enter image description here

  1. 右键单击用于删除文件夹/文件的提交

enter image description here

  1. 选择 提交中的恢复更改选项

  2. 现在只需点击推送起源

enter image description here

  1. 一切就绪! 您已经恢复了已删除的文件/文件夹 您可以在存储库中检查它

您可以使用 gitbash 恢复文件夹:

首先运行命令: < strong > git status 这将让您看到根文件夹和所有的文件。

例如,假设您删除了一个名为 lib 的根文件夹

档案: lib/commands/123 lib/commands/123/456 lib/commands/123/456/789/etc

通过使用 git 命令恢复它: