已将cache目录加入.gitignore,Git仍尝试推送该目录的原因
解决Git推送时已忽略目录仍报大文件超限问题
问题根源
你当前分支的历史提交记录里还保留着cache目录下的大文件。git rm -r --cached cache只是让Git停止追踪当前工作区的cache目录,但历史提交中的这些文件并没有被移除,推送时GitHub会检查所有待推送的提交内容,所以依然触发文件大小限制。
解决步骤
1. 彻底清除历史中的cache目录痕迹
推荐使用官方推荐的git filter-repo工具(比旧的git filter-branch更安全高效),执行命令移除所有历史提交里的cache目录:
git filter-repo --path cache --invert-paths
如果你的环境没有安装git-filter-repo,可以通过对应包管理器安装,比如:
- macOS:
brew install git-filter-repo - Linux:
sudo apt install git-filter-repo
2. 强制推送修改后的历史
因为修改了提交历史,需要强制覆盖远程分支的内容:
git push --force origin <你的分支名称>
⚠️ 注意:如果是多人协作的分支,强制推送会覆盖远程历史,务必提前和团队成员沟通确认。
3. 验证修复结果
再次检查本地分支的文件列表:
git ls-tree --name-only <你的分支名称>
确认cache目录不在输出结果中,之后重新推送即可解决大文件超限问题。
备选应急方案(不推荐)
如果无法使用git filter-repo,可以用已被官方标记为过时的git filter-branch命令:
git filter-branch --tree-filter 'rm -rf cache' HEAD
执行完成后同样需要执行强制推送命令。
内容的提问来源于stack exchange,提问作者Christopher Dirksen
相关产品推荐
相关产品推荐

