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

📘 参考资源

相关推荐
xlq223222 小时前
2.git
git
OYangxf2 小时前
Git Ignore
大数据·git·elasticsearch
哆哆啦002 小时前
obsidian远程同步方案:infiniCloud+remotely save方案
笔记·git·obsidian
西柚小萌新4 小时前
【计算机常识】--使用 Gitea 在本地/内网搭建 Git 私有服务器
服务器·git·gitea
zhangfeng11335 小时前
scp 命令的使用方法 什么软件支持 .git bash xshell .openssh
开发语言·git·bash
_君莫笑13 小时前
大厂Git使用规范
git
无心水20 小时前
【Hermes:安全、权限与生产环境】39、智能体也会犯错?Hermes 纠错、回滚与遗忘机制全指南 —— 让 AI 的错误像 Git 一样可逆可控
人工智能·git·安全·mcp协议·openclaw·hermes·honcho
南境十里·墨染春水1 天前
linux学习进展 git详解
linux·git·学习
zhangfeng11331 天前
CodeBuddy ai对话框上面的git docs terminal Rulds 干嘛用的,以thinkphp fastadmin 为例,插件市场
人工智能·git·编程
OYangxf1 天前
Git Conflict Resolution
大数据·git·elasticsearch