2013-04-16 153 views
0

我正在与一些其他人设法在几个提交中包含几个大型DDL文件的git repo。有没有办法让我从以前的所有提交中删除它们?不幸的是,它并不像针对特定的提交那样容易,因为它们遍布全球。从Git Repo中删除DLL

我会解决只保留最新的提交上主和删除它的一切。

+0

你需要知道具体的提交和使用这个:http://stackoverflow.com/questions/1186535/how-to-modify-a-specified-commit – logoff

回答

3

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

核选择:过滤器分支

还有,如果你需要重写一些脚本化的方式提交更多数量的,你可以使用一个新的历史改写选项 - 例如,全局更改您的电子邮件地址或从每次提交中删除文件。该命令是filter-branch,它可以重写大量的历史记录,所以除非你的项目尚未公开,其他人还没有从你将要重写的提交中解脱出来,否则你可能不应该使用它。但是,它可能非常有用。你会学到一些常用的东西,这样你就可以了解它能够做的一些事情。

删除从每一个文件提交

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

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

重写6b9b3cf04e7c5686a9cb838c3f36a8cb6a0fc2bd(21/21)

REF“参/头/主”被改写

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

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

当心这是一个功能强大但也很危险的工具,告诉你的同事不要推动任何提交以防止历史混乱。

相关问题