已将大文件加入.gitignore并取消暂存,Git推送仍报错如何解决?
问题原因
- 你执行
git add -A时,大文件file1已经被纳入Git跟踪体系,后续添加到.gitignore的规则仅对未被Git跟踪过的新文件生效,对已经有跟踪记录的文件不会生效。 - 你后续执行的
git rm --cached和删除提交操作,仅在最新的提交中移除了该文件,但该大文件仍然存在于你的本地提交历史中。推送操作会将所有本地提交的完整历史同步到远端,因此历史记录中包含的大文件依然会被GitHub的大小检测机制拦截。
修复方案
场景1:不需要在Git中保留该大文件,需彻底清理历史记录
方法1:回退到添加大文件前的提交(适合提交链较短的情况)
- 查看提交日志,找到添加大文件之前的commit ID:
git log --oneline
- 回退到对应提交,所有修改会保留在工作区:
git reset <你查到的对应commit ID>
- 确认
file1已被加入.gitignore,重新执行add、commit操作后再推送即可。
方法2:全历史清理指定大文件(适合提交历史较多,不想修改其他提交的情况)
使用Git自带的filter-repo工具遍历所有提交,彻底删除历史中所有file1的记录:
git filter-repo --invert-paths --path file1
执行完成后直接推送即可。
场景2:需要将该大文件纳入Git管理
使用Git LFS存储大文件,绕过GitHub普通仓库的100MB大小限制:
- 本地初始化Git LFS:
git lfs install
- 配置LFS跟踪
file1:
git lfs track "file1"
- 提交生成的LFS配置文件:
git add .gitattributes git commit -m "配置LFS跟踪大文件"
- 正常推送即可,大文件会被上传到LFS存储区,不会触发大小限制。
内容的提问来源于stack exchange,提问作者koyamashinji
相关产品推荐
相关产品推荐

