背景:
使用git管理的项目,在push时遇到问题,push前创建的文件太大,push失败,现在把本地的大文件删除了,还push不了。


分析:
即使你从本地删除了大文件,Git 仍然保留了该文件在历史记录中,所以 push 的时候还是会尝试上传整个历史(包括那个大文件),从而失败。
解决方案:
1. 确认文件是否真的从 Git 历史中删除
首先,请确认文件是否只是从本地删除,而没有从 Git 历史中真正移除。你可以运行以下命令查看历史记录中是否仍然包含该大文件:
git log --all --full-history -- "**/large_file_name"
qw MINGW64 /e/om/om (master)
$ git log --all --full-history -- "data/soft/ES/ela*"
commit 0a44e5af20c7c6558a7db22de22b90e526e1f6a1 (HEAD -> master)
Author: qq <ww@******>
Date: Thu Sep 25 08:28:25 2025 +0800
,文件太大,各安装包删除
commit 505eb05fd096350ddf14c3c9a9a1667072ddd3e3
Author: qq <ww@******>
Date: Wed Sep 24 16:30:51 2025 +0800
ES安装及脚本文件
发现该文件仍然出现在历史中,接下来需要彻底从 Git 历史中移除它。
2. 使用 git filter-branch彻底删除历史中的大文件
git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch path/to/large_file' --prune-empty --tag-name-filter cat -- --all
$ git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch data/soft/ES/ela*' --prune-empty --tag-name-filter cat -- --all
WARNING: git-filter-branch has a glut of gotchas generating mangled history
rewrites. Hit Ctrl-C before proceeding to abort, then use an
alternative filtering tool such as 'git filter-repo'
(https://github.com/newren/git-filter-repo/) instead. See the
filter-branch manual page for more details; to squelch this warning,
set FILTER_BRANCH_SQUELCH_WARNING=1.
Proceeding with filter-branch...
Rewrite 505eb05fd096350ddf14c3c9a9a1667072ddd3e3 (11/17) (34 seconds passed, remaining 18 predicted) rm 'data/soft/ES/elasticsearch-7.16.1-linux-x86_64.tar.gz'
Rewrite 64776e78a6af9b70339408d1abf489caf8905a06 (12/17) (38 seconds passed, remaining 15 predicted) rm 'data/soft/ES/elasticsearch-7.16.1-linux-x86_64.tar.gz'
Rewrite 1ec174dfd8a22c8cbcaba0895dde814738c7128c (13/17) (41 seconds passed, remaining 12 predicted) rm 'data/soft/ES/elasticsearch-7.16.1-linux-x86_64.tar.gz'
Rewrite c2fcbf01d1b9f7d8ed975c8fc30693411f64eba4 (14/17) (45 seconds passed, remaining 9 predicted) rm 'data/soft/ES/elasticsearch-7.16.1-linux-x86_64.tar.gz'
Rewrite 47cf60040e80bfc5d2d715acc9a4251424546749 (15/17) (48 seconds passed, remaining 6 predicted) rm 'data/soft/ES/elasticsearch-7.16.1-linux-x86_64.tar.gz'
Rewrite 8b9716c6ab6f3ba9ff0b93a5685293dcf88b8811 (16/17) (52 seconds passed, remaining 3 predicted) rm 'data/soft/ES/elasticsearch-7.16.1-linux-x86_64.tar.gz'
Rewrite 0a44e5af20c7c6558a7db22de22b90e526e1f6a1 (17/17) (55 seconds passed, remaining 0 predicted)
Ref 'refs/heads/master' was rewritten
Ref 'refs/remotes/origin/master' was rewritten
WARNING: Ref 'refs/remotes/origin/master' is unchanged

再次查看结果:

3. 强制推送修改后的历史
清理完历史后,你需要强制推送到远程仓库(注意:这会重写远程历史,可能影响其他协作者):
git push origin --force

4273

被折叠的 条评论
为什么被折叠?



