我已经意外地提交了敏感数据文件,并希望从当前的GitHub repo状态和整个历史记录中删除它。为了确保该过程完成,我在浏览器中打开了一个新选项卡,其中URL指向存储库历史记录中该文件的某个早期阶段。
我经历过" Remove sensitive data"在GitHub帮助中的文章,我通读了Darhuuk的答案,和其他许多人一样好,但仍然没有 - 文件清楚地从我的本地存储库及其GitHub远程对应文件中删除,但是当我刷新时其他标签,我可以清楚地看到该文件及其 sensitve 内容。
我错过了什么,或者我接下来应该做什么?
答案 0 :(得分:4)
我不得不联系GitHub支持。他们一边跑git gc
就完成了这个程序。
由于我还没有任何合作者到我的存储库,因为我没有使用标签,所以我已经取消了步骤,我认为这些步骤无关紧要。除了他们我做了:
清空sensitive.file
文件中的存储库:
git filter-branch --force --index-filter \
"git rm --cached --ignore-unmatch sensitive.file" \
--prune-empty --tag-name-filter cat -- --all
强制更改GitHub:
git push origin --force --all
清除本地缓存的更改:
git for-each-ref --format='delete %(refname)' refs/original | git update-ref --stdin
git reflog expire --expire=now --all
git gc --prune=now
之后,git报告我,没有什么可以提交(git status
),我的本地存储库是远程的(git pull
+ git push
)最新的。但是,我仍然可以访问该文件,使用URL,我在其中一个标签中打开,这导致其在GitHub中的一个早期副本。
刷新页面没有带来任何变化。档案显然在那里。
我联系了GitHub支持,并在五分钟内得到答复(!)。他们不得不在他们身边运行git垃圾收集器(git gc
)来完成这个过程。最后,在此之后,提到的链接开始显示404。