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

📘 参考资源

相关推荐
Big__Star2 小时前
Git 和 GitHub 学习指南本地 Git 配置、基础命令、GitHub 上传流程、企业开发中 Git 的使用流程、以及如何将代码部署到生产服务器
服务器·git·github
头疼的程序员11 小时前
git学习与使用(远程仓库、分支、工作流)
git
莫邪博客11 小时前
Git报错:Another git process seems to be running in this repository
git
西柚小萌新15 小时前
【工具推荐】--Git详解
git
MonkeyKing_sunyuhua1 天前
项目删除了,为什么vscode中的git还是存在未提交记录,应该怎么删除掉
ide·git·vscode
ao_lang1 天前
掌握Git:版本控制与高效协作指南
git·学习
会飞的鱼先生1 天前
vue2、vue3项目打包生成txt文件-自动记录打包日期:git版本、当前分支、提交人姓名、提交日期、提交描述等信息 和 前端项目的版本号json文件
前端·vue.js·git·json
do.ris1 天前
Git上传项目到GitHub
git·github
seasugar1 天前
Github拉取失败问题
git