误删本地Git仓库多数文件求助:git filter-repo操作后无法恢复
恢复Git仓库内容及提交历史的操作步骤
1. 检查Git留存的原始历史备份
先执行命令确认是否还能找回git filter-repo操作前的仓库状态:
git for-each-ref refs/original/
如果有输出结果,说明原始的提交历史和文件数据还保存在Git的对象数据库中,可直接恢复。
2. 重置分支到原始状态
根据你使用的主分支名称(main或master),执行对应命令将仓库恢复到处理大文件前的状态:
# 若主分支是main git reset --hard refs/original/refs/heads/main # 若主分支是master git reset --hard refs/original/refs/heads/master
执行后本地仓库会恢复所有文件及之前的完整提交历史。
3. 安全处理大文件问题(避免再次出错)
恢复完成后,重新处理那个大体积图片,确保后续推送正常:
- 在项目根目录的
.gitignore文件中添加该行(如果还没加),避免大文件再次被追踪:
theme/static/img/founder_infos2.png
- 彻底从Git历史中移除该大文件:
git filter-repo --invert-paths --path theme/static/img/founder_infos2.png
- 强制推送到新的GitHub仓库:
git push --force origin main
4. 若原始引用不存在的补救方案
如果refs/original/目录下没有内容,执行以下命令查找所有未被引用的Git对象:
git fsck --lost-found
命令会把无引用的提交、文件对象放到.git/lost-found/目录中,你可以通过git show <提交哈希值>逐个查看提交内容,找到包含你丢失工作的提交后,创建临时分支恢复:
git branch recover-branch <目标提交哈希> git checkout recover-branch
内容的提问来源于stack exchange,提问作者Murcielago
相关产品推荐
相关产品推荐

