Git只对某些文件重写分支

时间:2014-03-20 03:16:05

标签: git git-filter-branch

我正在寻找一种方法来重写我的git repo的提交,以便只保留与某些文件相关的提交。提交(实际上是文件)不属于我的标准,我不在乎我是否丢失它们。

我想保留的文件现在存在于我的repo的某个子目录中,但是一开始它们就住在它的根目录下,然后我移动了它们。我希望保留与这些文件相关的所有提交历史记录,当它们生活在根目录时,以及它们何时被移动到它们自己的子目录中,以及它们的所有更改。

假设与这些文件相关的提交除了这些文件之外没有任何接触(如果我发现任何提交没有涵盖这个要求,我可以使用git rebase和split来实现它)。

有没有办法实现这一点,可能使用filter-branch或类似的东西?

编辑:我希望保留的所有文件在其名称中都有一些前缀:例如'foobar'。我希望删除的每个其他文件/子目录都没有此前缀。

2 个答案:

答案 0 :(得分:2)

我认为你可以从GitHub的Remove sensitive data文章中获得很大的启发,在这篇文章中,他们遍历整个存储库并重写提交以删除某些特定文件,以便将其从历史记录中删除。

在您的情况下,您可能可以为每个不需要的提交执行此操作,那就是它。

答案 1 :(得分:1)

你肯定想要filter-branch。您需要一个树过滤器(或索引过滤器)来删除除要保留的文件之外的所有文件。像'找到。 ! (-name'name_to_preserve'-o -name'other_to_preserve')-delete'可能会起作用,但由于你还没弄清楚如何识别你想保留的文件,我不能在那里提供很多指导。

相关问题