删除 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 的 NFD 与 NFC 有什么区别?为什么我有个文件在 NFC 中间不会被当成改动,在 NFD 中就会当成改动
git·面试·github
呆萌很15 小时前
Git push 408 超时、远程断开解决办法
git
Lesile16 小时前
Hands-on Git experience
git
Co_Hui17 小时前
Git 基本使用
git
cooldream200917 小时前
AI 时代,Git 应该怎么学
人工智能·git
柒和远方19 小时前
V053: 从 Git 回退到 AI 工程治理:Vibe Coding 的 Harness 工作流与质量阀门
git·vibecoding
炸膛坦客21 小时前
Git 和 GitHub:(五)一文给出常用 Git 命令,持续更新中......
git·github
门前大桥下.1 天前
从git创建新分支后推送数据同步新的分支
git
炸膛坦客1 天前
Git 和 GitHub:(三)基础知识与实用技巧
git·github
触底反弹1 天前
Vibe Coding 不写 Git,等于悬崖边飙车
人工智能·git·面试