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

📘 参考资源

相关推荐
&Sinnt&7 小时前
Git 版本控制完全指南:从入门到精通
git·后端
Tiny21410 小时前
多人协同开发时Git使用命令
git
WebGirl11 小时前
代码Revert后再次Merge会丢失的问题
git
小皮侠16 小时前
nginx的使用
java·运维·服务器·前端·git·nginx·github
HalukiSan17 小时前
如何提交PR
git·gitlab·github
爱莉希雅&&&1 天前
shell编程之awk命令详解
linux·服务器·git
baiyu331 天前
成为git砖家(12): 看懂git合并分支时冲突提示符
git
wu_aceo1 天前
将本地项目提交到Gitee
git·gitee·提交·本地提交·上传git
随便取个六字2 天前
GIT操作 学习
git·学习
星源~2 天前
tree 命令集成到 Git Bash:可视化目录结构的指南
git·单片机·物联网·嵌入式·项目开发