git清除仓库敏感文件并同步至远端的操作

以下是使用 git filter-repo 清除仓库敏感文件并同步至远端的完整操作文档。请严格按照顺序执行,避免历史污染或数据丢失。


📋 前置准备

  1. 通知团队暂停开发:在操作期间禁止任何人推送代码,否则其提交会重新引入被删除的文件。

  2. 完整备份仓库 :

    bash 复制代码
    # 克隆一份完整镜像作为灾备
    git clone --mirror <repo-url> backup-repo.git
  3. 安装 git-filter-repo (推荐使用 pip):

    bash 复制代码
    pip install git-filter-repo
  4. 确保本地仓库是最新全量克隆 (非 shallow clone):

    bash 复制代码
    git fetch --all
    git pull --all

🔧 第一步:执行历史重写

⚠️ filter-repo 默认重写所有分支和标签,与当前所在分支无关。无需切换分支。

bash 复制代码
# 从整个仓库历史中彻底移除 .env 文件
git filter-repo --path .env --invert-paths --force
  • --path .env:指定目标文件路径(支持通配符,如 *.env、config/.env)
  • --invert-paths:排除该路径(即删除),不加此参数则为仅保留
  • --force:跳过 "fresh clone" 安全检查(确认已备份后可加)

✅ 第二步:验证清除结果

必须在推送前确认,否则可能将未清理的历史推送到远端。

bash 复制代码
# 搜索所有分支/标签历史中是否仍存在 .env
git log --all --full-history -- .env
  • 无任何输出 → ✅ 清除成功,继续下一步
  • 有输出 → ❌ 仍有残留,停止操作,检查路径是否正确或是否存在同名变体(如 .env.local)

🚀 第三步:推送到远端

3.1 解除 GitLab/GitHub 分支保护

若 master/main/dev 等分支受保护,需先在平台设置中:

  • 开启 Allowed to force push,或
  • 临时 Unprotect 分支(推送后立即恢复)
3.2 更新远程跟踪引用(防止 stale info)
bash 复制代码
git fetch origin
3.3 强制推送所有分支和标签
bash 复制代码
git push origin --all --force-with-lease
git push origin --tags --force-with-lease

💡 若遇大仓库 HTTPS 推送断开,先执行:

bash 复制代码
git config http.postBuffer 524288000

或改用 SSH 协议推送。推送完成后可恢复默认:git config --unset http.postBuffer

3.4 恢复分支保护

推送成功后立即回到平台重新启用分支保护规则。


📢 第四步:通知团队成员更新本地仓库

将以下通知发送给所有协作者:

【重要】仓库历史已重写,请按以下步骤更新本地环境

由于安全原因,仓库中的 .env 文件已从全部历史中移除。你的本地分支已与远端不兼容,请勿使用 git pull(会导致旧历史合并回来)。

请对每个本地分支执行:

bash 复制代码
git fetch origin
git reset --hard origin/<branch-name>

如果你有未推送的本地提交,请先备份为补丁再重做:

bash 复制代码
git format-patch origin/<branch-name> --stdout > my-changes.patch
git reset --hard origin/<branch-name>
git apply my-changes.patch

完成后请删除本地的 .env 文件(如仍存在于工作区)。


⚠️ 关键注意事项

风险点 说明
不可逆操作 filter-repo 重写后原始 commit hash 永久改变,仅靠备份恢复
CI/CD 缓存 检查流水线、构建缓存、Docker 镜像中是否仍包含旧的 .env,需手动清理
环境变量迁移 确保 .env 内容已迁移至安全的密钥管理服务(如 Vault、GitLab CI Variables)后再执行清除
fork / mirror 如有下游 fork 或镜像仓库,需同步通知其维护者重新同步
GitHub 专用 GitHub 不会自动 GC 已删除的对象,如需立即生效需联系 GitHub Support 触发 GC
相关推荐
敲敲敲-敲代码4 小时前
git安装记录
git
我是人✓4 小时前
Git入门:从零开始掌握分布式版本控制
分布式·git
Aurora_eye5 小时前
Git 笔记
笔记·git
解道Jdon6 小时前
FigCraft把Figma用Rust从零重写了一遍
ide·windows·git·svn·eclipse·github·visual studio
橙橙笔记7 小时前
QT安卓软件的制作
android·git·qt·软件
我是人✓8 小时前
Git远程协作与标签管理全攻略
git
闰土_RUNTU8 小时前
Git实用手册(持续更新)
git
Shaoshing9 小时前
ggggggggit
git
Lucky GGBond9 小时前
解决 Git 推送报错:Could not resolve host 及 DNS 劫持排查指南
git
川石课堂软件测试9 小时前
自动化测试|持续集成Git使用详解
git·python·jmeter·mysql·ci/cd·容器·kubernetes