如何阻止Git推送已提交大文件?为何未纳入LFS?
问题解决方法
为什么文件没被Git LFS处理?
Git LFS的过滤规则只对未提交到仓库的新文件生效。你是先把template.pptx以普通文件形式提交到Git历史后,才在.gitattributes里添加的LFS规则,所以历史提交里的该文件依然是普通大文件,推送时Git会扫描整个提交历史,自然会触发GitHub的大小限制。
另外,你后来删除文件并清除缓存,只是移除了当前工作区和暂存区的文件,但历史提交里的记录还在,这就是推送时依然报错的核心原因。
如何阻止Git推送历史中的大文件?
你需要彻底从Git提交历史中移除这个大文件,具体步骤分两种情况:
情况1:大文件仅在最近一次未推送的提交中
如果这个大文件是你最后一次提交的内容,且还没推送到远程,可以直接撤销提交,重新处理:
- 撤销最近一次提交(保留文件修改):
git reset HEAD~1 - 确保
.gitattributes里的LFS规则已生效,重新添加文件:git add template.pptx - 重新提交并推送:
git commit -m "提交信息" && git push
情况2:大文件存在于更早的历史提交中
如果文件已经在多轮历史提交里,必须清理整个历史记录,推荐用git filter-repo工具(比旧的git filter-branch更安全稳定):
- 安装
git filter-repo(多数Git版本已内置,若没有可自行安装) - 执行命令移除历史中所有
template.pptx的记录:git filter-repo --path template.pptx --invert-paths - 强制推送到远程仓库(会覆盖远程历史,若多人协作需提前通知团队成员):
git push origin --force
后续注意事项
.gitignore只对未被Git跟踪的文件生效,已经提交到历史的文件,添加到.gitignore没用。- 之后再添加大文件时,要确保先配置好
.gitattributes的LFS规则,再执行git add和提交,这样文件才会被LFS正确处理。
内容的提问来源于stack exchange,提问作者user1443098
相关产品推荐
相关产品推荐

