删除文件再提交,只是在最新版本里没有了,历史提交里依然保存着。要从历史中彻底去掉,需要改写历史。
第一步:先处理泄露的密码
密码一旦推送到远程,就要当作已经泄露:先去修改密码或者作废密钥,再清理历史。只清理历史是不够的,别人可能早已克隆或者 fork 了仓库。
第二步:用 git filter-repo 改写历史
Bash
# 先单独克隆一份干净的副本来操作
git clone --mirror git@example.com:me/project.git
cd project.git
# 从所有历史中删除指定文件
git filter-repo --path backup.zip --invert-paths
git filter-repo --path config/database.php --invert-paths
# 改写后强制推送
git push --force --mirrorgit filter-repo 需要单独安装,它是 Git 官方文档推荐的工具,比旧的 git filter-branch 快得多,也更不容易出错。
第三步:通知协作者
历史改写以后,其他人本地的仓库和远程不再一致,需要重新克隆。托管平台上已有的 fork 和缓存可能仍然保留旧数据,必要时联系平台清理。
以后可以在 .gitignore 里排除压缩包和本地配置文件,敏感配置改用环境变量。
正在读取登录状态…
暂无讨论,说说你的看法吧