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

📘 参考资源

相关推荐
海盗123411 小时前
在群晖NAS上使用Git Server
git
y小花11 小时前
git常用指令
git
华科大胡子11 小时前
开源项目 Git 贡献全流程拆解
git
极地星光11 小时前
工程中:Git 子模块(submodule) vs 直接依赖(源码/库/包管理器)
git
无限进步_12 小时前
【C++&string】大数相乘算法详解:从字符串加法到乘法实现
java·开发语言·c++·git·算法·github·visual studio
无限进步_13 小时前
【C++】验证回文字符串:高效算法详解与优化
java·开发语言·c++·git·算法·github·visual studio
无限进步_16 小时前
【C++】重载、重写和重定义的区别详解
c语言·开发语言·c++·ide·windows·git·github
历程里程碑16 小时前
1 . Git本地操作:版本控制 跨平台协作 仓库核心
java·开发语言·数据结构·c++·git·gitee·github
华科大胡子17 小时前
Git + 云原生
git
johnny23317 小时前
Git拓展:GitButler、Gitnuro、JGit
git