Git移除大文件后推送GitHub仍失败,文件已不存在如何解决?
解决GitHub推送因历史大文件导致的GH001错误
我太懂你这个糟心的情况了——明明已经把本地和暂存区的.terraform目录删得干干净净,Git状态也显示文件已删除,但一推送还是碰到一模一样的大文件错误。问题的核心很简单:那个超大的文件已经存在于你的Git提交历史里了,GitHub的预接收钩子会检查整个提交历史里的所有文件大小,所以光删当前版本的文件根本没用,必须彻底把它从历史记录里抹掉。
具体解决步骤
1. 安装git filter-repo(推荐工具)
官方现在已经不推荐使用老旧的git filter-branch了,git filter-repo是更安全、更高效的历史改写工具。先确保你的系统安装了它:
- macOS:用Homebrew安装
brew install git-filter-repo - Linux(Debian/Ubuntu):
sudo apt-get install git-filter-repo - Windows:可以通过Chocolatey安装,或者从官方仓库下载可执行脚本
2. 彻底从历史中移除目标大文件
在仓库根目录执行以下命令,把那个超大文件的完整路径填进去:
git filter-repo --path .terraform/plugins/darwin_amd64/terraform-provider-aws_v1.41.0_x4 --invert-paths
这个命令会遍历所有提交历史,把包含该文件的所有提交都修改一遍,彻底清除这个文件的所有痕迹。
3. 强制推送覆盖远程历史
因为我们修改了本地的提交历史,必须用强制推送来覆盖远程仓库的旧历史:
git push origin master --force
⚠️ 重要提醒:如果这个仓库是多人协作的,一定要提前通知所有队友!让他们不要再基于旧的历史提交代码,否则后续合并会出现严重冲突。他们需要重新拉取更新后的仓库,或者用git pull --rebase来同步新的历史。
4. 后续预防
为了避免以后再踩这个坑,赶紧在仓库根目录创建(或修改).gitignore文件,把.terraform/目录加入忽略列表:
.terraform/
这样Git就会自动忽略这个目录里的所有文件,再也不会把它们加入版本控制了。
内容的提问来源于stack exchange,提问作者Mornor
相关产品推荐
相关产品推荐

