如果你不小心提交了包含敏感信息(如 API 密钥、数据库密码)的 .env
文件到 Git 仓库,需要 彻底删除 这个文件及其历史记录,以防泄露。以下是完整的处理步骤。
1. 立即更改敏感信息
重要! .env
文件中的密码和密钥可能已经泄露,立即更改相关凭据,如:
- 数据库密码
- API 密钥
- OAuth 令牌
- SSH 私钥
2. 确保 .env
文件不会再被提交
将 .env
添加到 .gitignore
,防止再次提交:
echo ".env" >> .gitignore
git add .gitignore
git commit -m "Add .env to .gitignore"
3. 从 Git 历史中删除 .env
文件
推荐方式:使用 git filter-repo
git filter-repo
是 Git 官方推荐的工具,速度快且更安全。
3.1 安装 git filter-repo
如果尚未安装,可以运行:
pip install git-filter-repo
3.2 彻底删除 .env
文件
在 Git 仓库根目录运行:
git filter-repo --path .env --invert-paths
参数解析:
--path .env
:指定要删除的文件--invert-paths
:删除所有提交中.env
文件的历史记录
4. 验证 .env
是否彻底删除
检查 .env
是否仍在历史记录中:
git log -- .env
git log -S"你的敏感信息"
如果没有返回任何记录,说明 .env
文件及其历史已经删除。
5. 强制推送到远程仓库
由于改写了 Git 历史,必须使用 --force
强制推送:
git push origin main --force
注意:
- 所有协作者 需要重新克隆仓库,否则
git pull
会失败。 - 确保
.env
不会再提交(参考步骤 2)。
6. 清理本地和远程的旧引用
如果 .env
可能出现在其他分支,确保所有分支都清理干净:
git push origin --all --force
7. 确保 .env
在远程仓库中消失
前往 GitHub / GitLab 仓库,检查 .env
是否仍然可见:
- 如果仍然存在,可能是缓存未清除,联系托管平台的技术支持要求彻底清除。
8. 预防未来类似问题
- 使用
.gitignore
确保敏感文件不会进入 Git 版本控制 - 使用环境变量管理工具(如
dotenv
)存储敏感数据 - 定期检查 Git 提交,避免误提交敏感信息:
git log -p | grep "API_KEY"
重要提醒
- 备份代码:执行
git filter-repo
之前,建议 备份仓库,以防误删。 - 通知协作者:如果有其他人参与该仓库开发,他们需要重新克隆仓库,否则会遇到同步问题。
- 合规性问题:如果泄露的是 用户数据,请考虑是否需要上报安全事件
- 对于 GitHub 仓库:如果
.env
仍然可见,可以尝试GitHub API
请求删除缓存或联系 GitHub 支持。 - 对于 GitLab:使用
git gc --prune=now
清理本地仓库,并在 GitLab 管理面板中触发仓库垃圾回收。 - 企业环境:如果 Git 服务器由企业管理可与管理员协商执行全局清理。
发表回复