如何在Git/GitHub中恢复所有特定类型的已删除文件?
恢复Git仓库中所有被删除的特定扩展名文件
步骤1:克隆远程仓库到本地
先把远程仓库克隆到本地,确保能完整访问历史记录:
git clone <你的远程仓库URL> cd <仓库目录名称>
步骤2:定位所有被删除的目标扩展名文件
用以下命令找出仓库历史中所有被删除的、指定扩展名的文件(示例中以.txt为例,替换成你需要的扩展名):
git log --all --diff-filter=D --name-only | grep "\.txt$" | sort | uniq
--diff-filter=D:仅筛选包含文件删除操作的提交grep "\.txt$":过滤出.txt扩展名的文件sort | uniq:去除重复的文件名(避免同一文件多次被删除的情况)
步骤3:批量恢复文件
执行以下bash脚本,自动恢复每个目标文件的最后存在版本:
git log --all --diff-filter=D --name-only | grep "\.txt$" | sort | uniq | while read file; do # 获取文件最后一次存在的提交哈希 last_commit=$(git log --all --follow --format="%H" -- "$file" | head -n 1) # 从该提交恢复文件 git checkout "$last_commit" -- "$file" done
记得把脚本中的.txt替换为你实际需要恢复的文件扩展名。
步骤4:提交并推送恢复结果
确认所有文件恢复完成后,提交更改并推送到远程仓库:
git add . git commit -m "恢复所有被删除的.txt文件" git push origin <你的分支名>
注意事项
- 若仓库体积较大,
git log命令可能运行缓慢,可添加--no-merges参数跳过合并提交以加速:git log --all --no-merges --diff-filter=D --name-only - 恢复操作前建议备份本地仓库,避免误操作导致数据问题
- 如果文件在多个分支中被删除,
--all参数会遍历所有分支的历史,确保不会遗漏
内容的提问来源于stack exchange,提问作者anon
相关产品推荐
相关产品推荐

