Git 删除大文件教程
🧹 Git 删除大文件完整教程
🧩 适用场景
- 不小心将大文件(如视频、压缩包、模型文件等)提交到了 Git 仓库
- 想彻底从仓库和提交历史中删除这个文件
- 希望远程仓库体积减小(如 GitHub 上传失败)
🛠️ 使用 git filter-repo
删除大文件(推荐)
git filter-repo
是git filter-branch
的现代替代工具,速度快、用法简洁。
✅ 第一步:安装 git-filter-repo
-
MacOS (使用 Homebrew):
brew install git-filter-repo
-
Ubuntu/Debian:
sudo apt install git-filter-repo
-
或使用 Python 安装:
pip install git-filter-repo
✅ 第二步:使用 git-filter-repo
删除指定大文件
进入你的 Git 仓库根目录下执行:
git filter-repo --path path/to/your/largefile --invert-paths
示例:
git filter-repo --path large_video.mp4 --invert-paths
说明:
--path
指定你要删除的文件路径(相对路径)--invert-paths
表示删除这个路径,而不是保留
✅ 第三步:强制推送到远程仓库
⚠️ 删除了历史记录后,需要强制推送(会覆盖远程仓库)
git push origin --force --all
git push origin --force --tags
✅ 第四步:清理本地缓存(可选)
rm -rf .git/refs/original/
git reflog expire --expire=now --all
git gc --prune=now --aggressive
⚠️ 注意事项
- 操作前建议备份仓库!
- 所有协作者在你执行完毕后必须重新 clone 仓库
- 如果你的仓库是开源的,别人已经 fork 了历史版本,这些历史记录就无法真正删除
📦 查看仓库中最大文件的方法
你可以使用以下命令查找仓库中体积最大的文件:
git rev-list --objects --all \| git cat-file --batch-check='%(objecttype) %(objectname) %(objectsize) %(rest)' \| grep '^blob' \| sort -k3 -n \| tail -n 10 \| awk '{print $3, $4}'
🧼 其他替代方法
- 使用
BFG Repo-Cleaner
(适合大文件批量清理) - 使用
.gitignore
忽略不需要的文件(但不影响历史)
📘 参考资源
git-filter-repo
官方文档- GitHub 文档:从历史中删除敏感数据