你有没有不小心把密码,密钥,token 等重要数据随着代码一起上传到 Github 的惨痛经验?
如果你刚好犯了这个错误,希望这篇文章能帮助到你把隐私文件从 git 的历史记录,以及 github 上面删除。
要从 Git 历史中完全删除一个文件,包括远程仓库,你可以使用 git filter-branch
命令或者 BFG Repo-Cleaner
工具。这里我将展示如何使用 git filter-branch
命令。
首先,你需要在本地仓库中执行这个命令。然后,你需要强制推送到远程仓库。请注意,这将重写你的提交历史,所以如果有其他人正在使用这个仓库,你需要通知他们。
以下是步骤:
-
在你的本地仓库中,运行以下命令,将
file-to-remove
替换为你要删除的文件的路径:git filter-branch --force --index-filter \ "git rm --cached --ignore-unmatch path-to-your-file" \ --prune-empty --tag-name-filter cat -- --all
path-to-your-file 是你要删除的文件路径。
-
然后,你需要强制推送到远程仓库:
git push origin --force --all
-
如果你有标签,你也需要强制推送它们:
git push origin --force --tags
-
在你的本地仓库中,你可能还需要进行一些清理工作,以删除旧的未引用的对象:
git for-each-ref --format='delete %(refname)' refs/original | git update-ref --stdin git reflog expire --expire=now --all git gc --prune=now
请注意,这个过程将不可逆,所以在执行前请确保你有一个备份。
除了删除 Github 上的记录,建议同时把已经泄露的密码, token, 密钥都立即重置,因为有无数的脚本和机器人在盯着 Github 上的代码,我们一不小心上传了隐私信息,他们就会马上记录下来,然后拿去干坏事。