恢复Git仓库中已删除的文件夹
我删除了文件夹内的所有内容,并且该文件夹为空。 我在我的远程回购中仍然有一份副本。 但是,当我做了一个git pull
它没有放回被删除的文件是不是应该这样做?
所以我做了一些研究,看到你可以通过执行git checkout <revision> -- <name of file>
来恢复git checkout <revision> -- <name of file>
但是这只适用于文件。
我如何检索目录中的所有文件?
你可以用文件做的所有事情,你也可以使用文件夹。
还请注意在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 checkout -- removed_directory
如果您想恢复所有更改,请执行以下操作:
git reset --hard HEAD
唯一对我有用的是检出另一个文件夹中的回购。 假设当前的回购在/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
后将失去任何some-commit