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

时间:2015-06-16 18:18:24

标签: git git-checkout

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

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

但这只适用于文件。

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

10 个答案:

答案 0 :(得分:171)

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

另请注意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> 

答案 1 :(得分:5)

您可以使用git restore恢复文件或文件夹。

git restore --source master~1 "PATH_IN_YOUR_REPO"

这里,主用户〜 1 从主分支将文件夹还原为“ 1”版本。

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

答案 2 :(得分:4)

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

git checkout -- removed_directory

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

git reset --hard HEAD

答案 3 :(得分:2)

对我来说唯一有用的是结帐另一个文件夹中的回购。假设当前仓库在/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

之后丢失任何提交

答案 4 :(得分:0)

如果您没有指定特定文件,则应该能够提取特定提交的全部内容。例如:git checkout 264794319e9695ba843cd6(假设散列的所有文件都处于正确的状态)。

pull无法恢复文件的原因是,git会将您的删除视为最近的更改,并将其应用于您所提取的任何内容之上。

(我建议在新的分支机构进行试验。)

答案 5 :(得分:0)

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

git restore --staged some/deleted/folder

答案 6 :(得分:0)

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

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

您可以从此处克隆代码,也可以仅以zip格式下载代码。

答案 7 :(得分:0)

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

答案 8 :(得分:-1)

对于uncommited删除,它就像这样简单:

git reset HEAD rel / path / to / deleted / directory / *

答案 9 :(得分:-2)

Rt点击项目 - &gt;团队 - &gt;重置

在重置类型中,选择硬重置。这会将您的远程存储库复制到您的工作区。