从Git Repo中删除DLL

时间:2013-04-16 10:16:51

标签: git

我正在与几个其他人一起工作git repo,他们设法在几个提交中包含了几个大型DDL文件。有没有办法让我从过去的所有提交中删除它们?不幸的是,它并不像针对特定提交那么容易,因为它们遍布整个地方。

我会满足于只保留最新的master提交并删除之前的所有内容。

1 个答案:

答案 0 :(得分:3)

http://git-scm.com/book/en/Git-Tools-Rewriting-History

  

核选项:过滤器分支

     

如果您需要以某种可编写脚本的方式重写大量提交,则可以使用另一个历史记录重写选项 - 例如,全局更改电子邮件地址或从每次提交中删除文件。这个命令是filter-branch,它可以重写你历史的大片,所以你可能不应该使用它,除非你的项目尚未公开,而其他人没有基于你即将重写的提交工作。但是,它非常有用。您将学习一些常用用途,以便了解它能够做到的一些事情。

     

从每个提交中删除文件

     

这种情况相当普遍。有人意外地提交了一个巨大的二进制文件与一个轻率的git add。,你想要在任何地方删除它。也许你不小心提交了一个包含密码的文件,并且你想让你的项目成为开源的。 filter-branch是您可能想要用来擦除整个历史记录的工具。要从整个历史记录中删除名为passwords.txt的文件,可以使用--tree-filter选项过滤分支:

     

$ git filter-branch --tree-filter'rm -f passwords.txt'HEAD

     

重写6b9b3cf04e7c5686a9cb838c3f36a8cb6a0fc2bd(21/21)

     

参考'refs / heads / master'被重写

     

--tree-filter选项在每次签出项目后运行指定的命令,然后重新发送结果。在这种情况下,您将从每个快照中删除名为passwords.txt的文件,无论它是否存在。如果要删除所有意外提交的编辑器备份文件,可以运行类似git filter-branch --tree-filter“rm -f *〜”HEAD。

     

您将能够观看Git重写树和提交,然后在末尾移动分支指针。在测试分支中执行此操作通常是个好主意,然后在确定结果是您真正想要的之后硬重置主分支。要在所有分支上运行filter-branch,可以将--all传递给命令。

请注意它是一个功能强大但也很危险的工具,请告知您的同事不要推迟任何提交以防止历史混乱。