Git 删除大文件教程

🧹 Git 删除大文件完整教程

🧩 适用场景

  • 不小心将大文件(如视频、压缩包、模型文件等)提交到了 Git 仓库
  • 想彻底从仓库和提交历史中删除这个文件
  • 希望远程仓库体积减小(如 GitHub 上传失败)

🛠️ 使用 git filter-repo 删除大文件(推荐)

git filter-repogit filter-branch 的现代替代工具,速度快、用法简洁。

✅ 第一步:安装 git-filter-repo

  • MacOS (使用 Homebrew):

    bash 复制代码
    brew install git-filter-repo
  • Ubuntu/Debian:

    bash 复制代码
    sudo apt install git-filter-repo
  • 或使用 Python 安装:

    bash 复制代码
    pip install git-filter-repo

✅ 第二步:使用 git-filter-repo 删除指定大文件

进入你的 Git 仓库根目录下执行:

bash 复制代码
git filter-repo --path path/to/your/largefile --invert-paths

示例:

bash 复制代码
git filter-repo --path large_video.mp4 --invert-paths

说明:

  • --path 指定你要删除的文件路径(相对路径)
  • --invert-paths 表示删除这个路径,而不是保留

✅ 第三步:强制推送到远程仓库

⚠️ 删除了历史记录后,需要强制推送(会覆盖远程仓库)

bash 复制代码
git push origin --force --all
git push origin --force --tags

✅ 第四步:清理本地缓存(可选)

bash 复制代码
rm -rf .git/refs/original/
git reflog expire --expire=now --all
git gc --prune=now --aggressive

⚠️ 注意事项

  • 操作前建议备份仓库!
  • 所有协作者在你执行完毕后必须重新 clone 仓库
  • 如果你的仓库是开源的,别人已经 fork 了历史版本,这些历史记录就无法真正删除

📦 查看仓库中最大文件的方法

你可以使用以下命令查找仓库中体积最大的文件:

bash 复制代码
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 忽略不需要的文件(但不影响历史)

📘 参考资源

相关推荐
vibecoding日记14 小时前
为什么我就想要「线性历史 + Signed Commits」,GitHub 却把我当猴耍 🤬🎙️
git·编程工具
程序员小崔日记1 天前
如何将代码轻松上传到 Gitee?Git 使用全攻略!
git·gitee·上传
Bigger2 天前
为什么你的 Git 提交需要签名?—— Git Commit Signing 完全指南
git·开源·github
DianSan_ERP3 天前
电商API接口全链路监控:构建坚不可摧的线上运维防线
大数据·运维·网络·人工智能·git·servlet
红豆子不相思3 天前
Tomcat 环境搭建与集群实战
服务器·git·tomcat
杰哥技术分享3 天前
Git 仓库迁移技术文档:从 CODING.net 迁移至腾讯云 CNB
git
梅孔立3 天前
Ansible 100 台服务器一键管控实战 进阶版
服务器·git·ansible
qq_426003963 天前
git切换当前分支到远程分支
git
ON10N4 天前
100% 纯 Vibe Coding,我是怎么用 AI 撸出一个 VS Code 插件的
git·ai编程·visual studio code