删除超100MB的7z文件后仍无法推送到GitHub的求助
解决GitHub推送因历史大文件失败的方法
核心原因
你删除了本地文件,但该大文件仍存在于Git的提交历史中,GitHub的大文件检测会扫描整个历史记录,所以即使当前工作区没有该文件,推送还是会失败。
具体解决步骤
1. 定位历史中的大文件
先确认这个大文件在哪些提交里出现过,执行:
git log --all --full-history -- "example_mods\vs-bloodiey\sourcefiles\assets.7z"
这会列出所有包含该文件的提交记录,可记下对应的提交哈希值备用。
2. 彻底清除历史中的大文件
使用git filter-repo(比旧的filter-branch更安全高效,Git 2.22+版本默认包含)移除历史中的目标大文件:
git filter-repo --path example_mods/vs-bloodiey/sourcefiles/assets.7z --invert-paths
注意路径统一用斜杠/,Windows环境也兼容。
3. 强制推送到远程仓库
因为修改了提交历史,需要强制推送覆盖远程分支:
git push origin main --force
⚠️ 注意:如果有其他协作者在该分支工作,提前告知他们,强制推送会覆盖远程历史,他们需要重新拉取并处理本地分支。
备选方案(无git filter-repo时)
如果你的Git版本未包含filter-repo,可以用BFG Repo-Cleaner工具:
- 下载BFG工具后,执行:
java -jar bfg.jar --delete-files assets.7z
- 清理Git残留垃圾:
git reflog expire --expire=now --all && git gc --prune=now --aggressive
- 最后同样执行强制推送命令。
验证清理结果
执行完操作后,检查本地历史是否已移除该文件:
git log --all --full-history -- "example_mods\vs-bloodiey\sourcefiles\assets.7z"
如果没有输出,说明历史已清理完成,可再次尝试推送。
内容的提问来源于stack exchange,提问作者Bloodiey Wafflecat
相关产品推荐
相关产品推荐

