我不小心将一个我没有权利的文件推送到一个可公开访问的仓库。
我可以做些什么来完全从repo中选择性地修改单个文件,以便它的数据完全消失?
答案 0 :(得分:4)
Git Filter-Branch在这种情况下是你的朋友,可爱的Github是well documented
答案 1 :(得分:2)
假设您添加文件的提交是最新的:
git reset --hard HEAD^
git push --force
如果存储库中有更多提交,则可以使用交互式rebase 来删除该提交。使用git rebase -i xxx
,xxx
是您想要核实之前的提交。然后在编辑器中删除包含“错误”提交的行。一旦保存并退出编辑器,该提交将永远消失。如果您无法删除整个提交,可以将pick
替换为文件中的edit
并修改提交(例如从暂存区域中删除文件),然后运行git rebase --continue
但是,从您的回购中撤出的每个人都需要执行相同的变种手动。但是那个文件已经公开了,你不应该重写历史来解除你的错误。
您可以使用git-filter-branch
删除文件,而不是所有的变基,described in the GitHub help:
git filter-branch --index-filter 'git rm --cached --ignore-unmatch NAME_OF_THE_FILE' --prune-empty -- --all
当然,在此操作之后你还需要git push --force
,因为它也会重写历史记录(如果有人从该存储库中取出并开始处理它,则需要注意所有注意事项)。如果您的仓库在github上,也不要忘记与他们联系以清除仓库的缓存。