如何从git repo完全修改文件?

时间:2012-05-14 14:41:19

标签: git delete-file permanent

我不小心将一个我没有权利的文件推送到一个可公开访问的仓库。

我可以做些什么来完全从repo中选择性地修改单个文件,以便它的数据完全消失?

2 个答案:

答案 0 :(得分:4)

Git Filter-Branch在这种情况下是你的朋友,可爱的Github是well documented

答案 1 :(得分:2)

假设您添加文件的提交是最新的:

git reset --hard HEAD^
git push --force

如果存储库中有更多提交,则可以使用交互式rebase 来删除该提交。使用git rebase -i xxxxxx是您想要核实之前的提交。然后在编辑器中删除包含“错误”提交的行。一旦保存并退出编辑器,该提交将永远消失。如果您无法删除整个提交,可以将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上,也不要忘记与他们联系以清除仓库的缓存。