我删除了文件夹中的所有内容,文件夹为空。我的远程仓库里还有一份副本。但是,当我做了git pull
时,它没有放回已删除的文件是不是应该这样做?
所以我做了一些研究,发现你可以通过这样做来恢复文件
git checkout <revision> -- <name of file>
但这只适用于文件。
如何检索目录中的所有文件?
答案 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”版本。
答案 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
我现在可以去/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;重置
在重置类型中,选择硬重置。这会将您的远程存储库复制到您的工作区。