git 仓库里误提交了大文件或密码,怎么彻底删除?

Mores小栋博客!

不小心把一个几百 MB 的压缩包和一个含数据库密码的配置文件提交进了 git,并且已经推送到远程仓库。直接删除文件再提交,仓库体积还是很大,历史记录里也还能看到密码。

回答 1阅读 0

1 个回答

  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 --mirror

    git filter-repo 需要单独安装,它是 Git 官方文档推荐的工具,比旧的 git filter-branch 快得多,也更不容易出错。

    第三步:通知协作者

    历史改写以后,其他人本地的仓库和远程不再一致,需要重新克隆。托管平台上已有的 fork 和缓存可能仍然保留旧数据,必要时联系平台清理。

    以后可以在 .gitignore 里排除压缩包和本地配置文件,敏感配置改用环境变量。

0 条回复

A文章作者M管理员
上传评论图片

暂无讨论,说说你的看法吧