【问题标题】:How do I completely nuke a file from a git repo?如何从 git repo 中完全删除文件?
【发布时间】:2012-05-22 01:38:28
【问题描述】:

我不小心将我无权访问的文件推送到可公开访问的存储库。

我可以做些什么来选择性地从 repo 中完全删除单个文件,以使其数据完全消失?

【问题讨论】:

标签: git delete-file permanent


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    如果您在存储库中有更多提交,您可以使用 interactive 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,因为它还会重写历史记录(如果有人从该存储库中提取并开始处理它,请注意所有警告)。如果您的 repo 在 github 上,也不要忘记联系他们以清除您的存储库的缓存。

    【讨论】:

    • 遗憾的是,事实并非如此。事后有一堆提交。
    猜你喜欢
    • 2020-11-05
    • 2011-03-28
    • 2018-10-19
    • 2015-01-06
    • 1970-01-01
    • 1970-01-01
    • 2013-05-25
    • 2017-02-16
    相关资源
    最近更新 更多