是否有办法恢复git/github中所有已删除的特定类型的文件?



我有一个很大的远程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 "^$")
    

相关内容

  • 没有找到相关文章

最新更新