我有一个很大的远程git/github文件存储库,它随机删除了我之前创建的文件。我想恢复所有的文件在整个存储库的历史与一个特定的扩展名,已被随机删除。
我试着在网上寻找,但没有人有解决方案,能够恢复所有文件的特定扩展名。
您可以首先使用git log --diff-filter
:
.txt
文件为例)。git log --diff-filter=D --name-only --pretty="" | grep ".txt$"
然后,您可以对每个文件进行恢复,例如:
git log --diff-filter=D --name-only --pretty=""|grep ".txt$"|xargs git restore --
这是在本地完成的,在克隆的Git存储库中。
它与GitHub无关,GitHub只是远程Git存储库托管服务,您可以在其中推送。
如果xargs
不工作(因为它需要提交文件被删除,为了恢复它),您将需要一个bash脚本:
首先在清单中包含提交散列:
git log --diff-filter=D --name-only --pretty="%h:%n%f" | grep ".txt$"
第二,通过脚本处理结果:
#!/bin/bash while read -r commit_hash; read -r file_path; do echo "file_path='${file_path}' was deleted in commit_hash='${commit_hash}'" if [[ ! -e "${file_path}" ]]; then git restore --source="${commit_hash}^" -- "${file_path}" echo "${file_path}' restored from parent of commit_hash='${commit_hash}'" else echo "${file_path}' was already restored since its past deletion" fi done < <(git log --diff-filter=D --name-only --pretty="%H" | grep -B 2 ".txt$" | grep -v "^$")