不小心把一个几百 MB 的压缩包和一个含数据库密码的配置文件提交进了 git,并且已经推送到远程仓库。直接删除文件再提交,仓库体积还是很大,历史记录里也还能看到密码。
1 个回答
Mores小栋博客!删除文件再提交,只是在最新版本里没有了,历史提交里依然保存着。要从历史中彻底去掉,需要改写历史。
第一步:先处理泄露的密码
密码一旦推送到远程,就要当作已经泄露:先去修改密码或者作废密钥,再清理历史。只清理历史是不够的,别人可能早已克隆或者 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里排除压缩包和本地配置文件,敏感配置改用环境变量。
正在读取登录状态…
暂无讨论,说说你的看法吧