【问题标题】:How can I completely remove a file from a git repository?如何从 git 存储库中完全删除文件?
【发布时间】:2011-03-28 09:15:01
【问题描述】:

我最近注意到我的文本编辑器使用的项目文件(以及其他一些垃圾)已添加到项目的 git 存储库中。由于它们实际上并不是项目的一部分,因此我想删除它们,但 git rm 不会从存储库中删除旧版本,而且我找不到其他看起来有希望的东西。

【问题讨论】:

标签: git


【解决方案1】:

您想要的工具是git filter-branch。它的用法描述为here,但基本上:

$ git filter-branch --tree-filter 'rm -f my_file' HEAD

将从每个提交中删除“my_file”。

请注意,这会重写每个提交,因此如果您推送到远程存储库,您必须 (a) 强制更新,并且 (b) 从您那里拉出的其他所有人现在都会有重复的提交(因为您重写了历史记录),如git rebase man page 所述。

【讨论】:

  • 我建议添加 --prune-empty 这样任何生成的空提交也将被删除。
  • @CodeMonkey:在这种情况下,您将使用更长的唯一路径。
  • 以后我应该做git push --force 吗? @mipadi
  • @mipadi,如果我很久以前在本地删除了这些文件怎么办? (并提交并推送这些删除)在这种情况下如何从存储库中删除文件?
  • @alper git pull origin master --allow-unrelated-histories
【解决方案2】:

这就是git filter-branch 的用途,但要注意你的回购历史会改变,并且在历史重写后提交哈希会有所不同。

如果你也想释放空间,我建议你使用git forget-blob,因为单独使用git filter-branch不会让git忘记你的文件,因为它可能仍然被remote、reflog、tags等引用。

git forget-blob main.c.swp

您可以获取更多信息here

【讨论】:

    猜你喜欢
    • 2013-05-28
    • 1970-01-01
    • 2023-03-31
    • 2011-01-23
    • 2011-01-04
    • 1970-01-01
    相关资源
    最近更新 更多