🐒《用BFG一键抹除Git黑历史!手把手教你删除已push的敏感文件》🐒
📖 前言
"啊!我居然把数据库密码提交到Git了!" —— 相信很多程序员都经历过这种"瞳孔地震"时刻。别慌!今天我们用BFG这款"时光机"帮你抹掉所有历史痕迹!(包括GitHub远程仓库哦!)
- 本喵以将sky-take-out仓库中的application-dev.yml文件的所有提交的历史记录删除为例,向各位讲解本喵的操作。
- 注意:本喵提供了指令实例,但是每个人具体路径不同,请替换成自己的,不知道怎么换的可以单独问ai,本喵主要提供解决思路~
🚨 行动纲领(先做这3步保命!)
- 项目备份:
cp -r 你的原始仓库路径 备份路径
(示例:cp -r D:\sky-take-out D:\backup
相当于给代码买保险) - 文件备份:单独复制
application-dev.yml
到桌面(防止误删后哭晕) - 关闭IDE:请出VS Code/IDEA等大佬休息5分钟(避免文件锁定引发玄学问题)
🛠️ 工具准备
下载 BFG Repo-Cleaner
❗把bfg.jar
放在纯英文路径(比如D:\tools
),中文路径会哭给你看!
🔮 魔法操作步骤
1️⃣ 召唤镜像分身(关键!)
# 在任意目录执行(比如桌面)
git clone --mirror "D:/你的原始仓库路径" "D:/临时镜像路径"
示例:
git clone --mirror "D:/sky-take-out" "D:/temp/repo-mirror.git"
👉 原理:--mirror
参数会创造一个"克隆人",所有操作在它身上做实验,不伤本体!
2️⃣ BFG核弹启动(注意躲避!)
java -jar D:\你的BFG路径\bfg.jar --delete-files application-dev.yml D:\临时镜像路径
示例:
java -jar D:/tools/bfg.jar --delete-files application-dev.yml D:/temp/repo-mirror.git
# 这里不确定自己的具体怎么写,可以单独问ai,本喵主要提供解决思路~
⚠️ 若遇到HEAD保护警告:
说明这个文件在最新提交里,手动执行:
# 进入镜像仓库目录
cd D:/temp/repo-mirror.git
git rm --cached sky-server/src/main/resources/application-dev.yml
git commit -m "紧急移除敏感文件"
👉 原理:HEAD是Git的"现在",BFG只能改"过去",所以得先处理"现在"
3️⃣ 深度清理战场
git reflog expire --expire=now --all
git gc --prune=now --aggressive
💡 这相当于给仓库做"大扫除+压缩",让删除的文件真正消失!
4️⃣ 检查是否毁尸灭迹
git log --all --name-status | grep -i "application-dev"
✅ 如果没有任何输出,恭喜!否则需要回到第2步补刀
(如果只是输出Manually remove application-dev.yml to allow complete history cleaning 只说明你处理head保护时手动删除了一次这个文件 并没有除了文件名以外的其他信息 也说明删除成功了喵~)
5️⃣ 发动时空覆盖攻击!
git push --force
💥 这步会强制覆盖远程仓库历史!请再次确认备份已完成!(后续别忘记到远程仓库检查看看是否真的赢了喵~会赢吗?)
🌈 彩蛋:图形化工具助攻
如果在GitHub Desktop等工具推送失败:
(本喵在最初push后,发现github上的仓库没有改变,回过神来细查发现因为仓库在github desktop中,需要本喵在这个工具上再push一次,真是气煞本喵!)
- 找到"Force Push"按钮(通常藏在下拉菜单)
- 长按3秒并默念"南无备份大法好"
- 见证红色感叹号变成绿色勾勾!
💡 课后小抄
- 所有路径中的
D:\xxx
都要换成你的实际路径 - 操作镜像仓库时,确保在
repo-mirror.git
目录执行命令 - 推荐在操作前喝杯咖啡压压惊☕
🌟 结语
通过这波操作,你的application-dev.yml
就像从未存在过!但切记:
With great power comes great responsibility.
(别拿BFG删同事的代码哦🤫)
🐾 我是你们的一行代码三备份的稳妥派博主,下期见!
Comments NOTHING