我已经删除了一个文件夹中的所有内容,该文件夹是空的。我的远程回收系统里还有一份。但是当我做了 git pull它没有把删除的文件是不是应该这样做呢?
git pull
所以我做了一些研究,发现你可以恢复一个文件 git checkout <revision> -- <name of file>
git checkout <revision> -- <name of file>
但那只适用于文件。
如何检索目录中的所有文件?
如果不指定特定的文件,应该能够获取特定提交的完整内容。比如: git checkout 264794319e9695ba843cd6(假设 hash 的所有文件都处于正确的状态)。
git checkout 264794319e9695ba843cd6
pull不还原文件的原因是,git 将您的删除视为最近的更改,并将其应用到正在拉取的任何内容上。
pull
(我建议在一个新的分公司做实验。)
如果您还没有提交您的更改,您可以恢复内容或目录:
git checkout -- removed_directory
如果要恢复所有更改,请:
git reset --hard HEAD
你可以用一个文件做任何事情,你也可以用一个文件夹做任何事情。
还要注意 在 Git 存储库中查找并恢复已删除的文件
如果你还没有索引(git add)你的更改,你可以恢复目录的内容:
git add
git checkout -- path/to/folder
如果删除已经建立索引,应该首先重置:
git reset -- path/to/folder git checkout -- path/to/folder
查找影响给定路径的最后一次提交。由于该文件不在 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。
/home/me/current
然后我做到了
git clone /home/me/current /home/me/temp
这使得在 /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 some-commit
将失去任何提交后 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 restore folder/
如果您必须在没有 Git 命令的情况下进行恢复,那么请按照下面的步骤操作
如果你有 Github 桌面,它会让事情变得简单
如果没有,那么安装并登录
转到文件
克隆仓库
选择 Repository your Repo
点击历史
选择 提交中的恢复更改选项
现在只需点击推送起源
您可以使用 gitbash 恢复文件夹:
首先运行命令: < strong > git status 这将让您看到根文件夹和所有的文件。
例如,假设您删除了一个名为 lib 的根文件夹
档案: lib/commands/123 lib/commands/123/456 lib/commands/123/456/789/etc
lib/commands/123
lib/commands/123/456
lib/commands/123/456/789/etc
通过使用 git 命令恢复它: