如何从 GitHub 上的提交历史记录中删除敏感文件

2025-06-07

如何从 GitHub 上的提交历史记录中删除敏感文件

是的!我们大多数人在职业生涯中都至少遇到过一次这种情况,尤其是在我们刚刚起步的时候。我们无意中将敏感数据提交到 GitHub。我们忘记了 gitignore 配置文件,其中包含数据库密码、API 密钥或 JWT 机密信息。我们立刻就开始恐​​慌。

几天前我就遇到过这种情况。我忘了忽略包含数据库连接密码和 JWT 密钥的默认 JSON 文件。我刚刚终于可以使用这个功能了,兴奋之余,我立即提交并推送到了 GitHub。直到 GitGuardian 通知我最近的提交包含密钥时,我才意识到自己的错误。

如果你也遇到同样的情况,首先要做的就是更改仓库的可见性。所以,如果是公开仓库,就把它设为私有。这样,在你删除文件时,就确保没有人能看到它。

接下来,如果你还没有进入项目文件夹,请在 git bash 或你正在使用的任何终端中 cd 进入。假设我的项目文件夹是 My-Project,其中有一个名为 secretFile.json 的文件需要删除。

cd My-Project
Enter fullscreen mode Exit fullscreen mode

然后运行以下命令。您必须包含文件路径,而不仅仅是文件名。

git filter-branch --force --index-filter \
  "git rm --cached --ignore-unmatch config/secretFile.json" \
  --prune-empty --tag-name-filter cat -- --all
Enter fullscreen mode Exit fullscreen mode

将 config/secretFile.json 替换为要删除的文件的路径。在我的例子中,secretFile.json 位于名为 config 的文件夹中。

注意:上述命令也会从您的本地存储库中删除文件,因此请确保在运行该命令之前已将内容复制到记事本或您使用的任何文件中。

然后创建并添加你的文件到 .gitignore 文件,这样你就不会意外地再次将其推送到 GitHub。你可以这样做:

echo "name-of-your-file" >> .gitignore
Enter fullscreen mode Exit fullscreen mode
git add .gitignore
Enter fullscreen mode Exit fullscreen mode
git commit -m 'add file to .gitignore'
Enter fullscreen mode Exit fullscreen mode

对更改满意后,即可将其推送到 GitHub

git push origin --force --all
Enter fullscreen mode Exit fullscreen mode

就这样!你的 repo 历史记录干净了,没有任何敏感文件的痕迹。

谢谢阅读。

文章来源:https://dev.to/sophie/how-to-delete-a-secret-file-from-github-ing
PREV
装饰器模式
NEXT
使用原生 HTML 自动完成下拉菜单