Git 彻底清除历史记录

适用场景

  • 误提交密码、密钥、token 等敏感信息

  • 误提交大文件导致仓库臃肿

  • 需要从所有历史提交中移除某些文件

方法一:git filter-repo(推荐)

安装

pip install git-filter-repo

删除指定文件/目录(从所有历史中移除)

git filter-repo --path .env --invert-paths

git filter-repo --path secrets/ --invert-paths

删除多个路径

git filter-repo --path .env --path config/secrets.json --invert-paths

方法二:BFG Repo-Cleaner

下载 bfg.jar(需要 Java)

https://rtyley.github.io/bfg-repo-cleaner/

删除文件

java -jar bfg.jar --delete-files .env

删除目录

java -jar bfg.jar --delete-folders .idea

替换敏感文本(如密码)

echo "mypassword123" > passwords.txt

java -jar bfg.jar --replace-text passwords.txt

清理并强制推送

git reflog expire --expire=now --all

git gc --prune=now --aggressive

git push --force

方法三:git filter-branch(旧方法,较慢)

git filter-branch --force --index-filter \

'git rm --cached --ignore-unmatch .env' \

--prune-empty --tag-name-filter cat -- --all

清理

git reflog expire --expire=now --all

git gc --prune=now --aggressive

推送到远程

强制推送(会覆盖远程历史)

git push origin --force --all

git push origin --force --tags

注意事项

| 事项 | 说明 |

|--------------|-------------------------------------------------------|

| 备份 | 操作前务必备份仓库 |

| 协作影响 | 所有协作者需重新 clone 或 git pull --rebase |

| GitHub 缓存 | 联系 GitHub 支持清除缓存,否则旧提交仍可通过 SHA 访问 |

| 已泄露的密钥 | 立即轮换,重写历史不能撤回已泄露的信息 |

工具对比

| 工具 | 速度 | 易用性 | 推荐场景 |

|-------------------|------|--------|----------------|

| git filter-repo | 快 | 简单 | 首选方案 |

| BFG | 快 | 简单 | 替换敏感文本 |

| git filter-branch | 慢 | 复杂 | 不推荐,已废弃 |

相关推荐
天远API3 小时前
Java后端进阶:处理多数据源聚合API —— 以天远小微企业报告为例
大数据·api
有什么东东4 小时前
Windows安装git教程以及初步使用
git
希艾席帝恩4 小时前
数字孪生如何重塑现代制造体系?
大数据·人工智能·数字孪生·数据可视化·数字化转型
武汉海翎光电4 小时前
从数据采集到智能决策:船舶传感器的技术跃迁之路
大数据·人工智能
不爱吃米饭_4 小时前
Gitea 轻量级的Git方案 - Gitlab的替代品
git·gitlab·gitea
下海fallsea5 小时前
美团没打赢的仗
大数据
无代码专家5 小时前
无代码:打破技术桎梏,重构企业数字化落地新范式
大数据·人工智能·重构
usrcnusrcn5 小时前
告别PoE管理盲区:有人物联网工业交换机如何以智能供电驱动工业未来
大数据·网络·人工智能·物联网·自动化
一缕猫毛6 小时前
Flink demo代码
java·大数据·flink