删除 Git 历史提交记录中的大文件

git filter-branch 命令的作用是重写Git仓库历史记录,这里具体用于彻底删除大文件。该命令参数解析:

bash 复制代码
git filter-branch --force --index-filter "git rm --cached --ignore-unmatch multimodal-transport-system/data/road.geojson" --prune-empty --tag-name-filter cat -- --all

作用说明:

  1. --index-filter 会在每个历史提交中执行 git rm --cached 操作,从Git索引中永久删除:
    • multimodal-transport-system/data/road.geojson 指定要删除的路径
    • --ignore-unmatch 允许文件不存在时跳过报错
  2. --prune-empty 会自动删除因删除文件而产生的空提交
  3. --tag-name-filter cat 会保留并重写所有标签(tag)
  4. --all 表示对所有分支进行操作

最终效果:该文件会从所有分支的历史提交记录中被清除(包括已推送的远程记录),但本地工作目录中的实际文件不受影响。执行后需要使用 git push --force 强制覆盖远程仓库历史。

注意:这会改变项目历史哈希值,执行前请确保已备份仓库,且提前通知所有协作者需要重新克隆仓库。

相关推荐
马优晨12 分钟前
git restore --source 提交id 和 git reset --hard 提交id 有什么区别
git·git reset·git restore·git回退的区别·git回退代码
小臭希18 分钟前
Git(代码版本控制系统)
java·git·github
Unity粉末状在校生10 小时前
Git解决fatal: Could not read from remote repository.的问题
git
少年攻城狮10 小时前
Obsidian系列---【如何使用obsidian同步到git?】
git
do better myself13 小时前
网站源码如何部署和加入GIT仓库的
git
爱学英语的程序员15 小时前
Git 提交 LF will be replaced by CRLF the next time Git touches it 报错
git
qq_3391911416 小时前
服务器git pull每次都要输入密码,linux 设置git登录,linux设置git只输入一次账户密码
git
一颗小行星!1 天前
快速理解 Git submodule
git
A-Jie-Y1 天前
Git基础-核心概念与常用命令
git
夜珀1 天前
Git基础修炼手册:在AtomGit上玩转版本控制
git