由git filter-branch困惑

时间:2015-04-20 19:39:08

标签: git git-filter-branch git-rewrite-history

我需要分析整个历史记录中给定目录中某些文件的确切情况,并使用像git log the_directory这样的东西还不够好。所以我虽然创建了一个只包含相关文件的分支。

我写了一个perl脚本remove-all-but-stuff并验证它是否正常工作。最初,我认为只是删除文件就行,但后来我修复了它以使用

system qw(git rm -r --ignore-unmatch --quiet), @files

其中@files包含在工作树中找到的不需要的目录和文件 - 这可能是个问题吗?

我创建了一个新分支并通过

过滤了它
git filter-branch --tree-filter remove-all-but-stuff my-branch

并且最后文件消失了,但这发生在最后一次提交中。历史记录包含对不应存在的文件的更改。

我正在使用git版本2.3.5。知道我做错了吗?


现在我甚至在没有查看是否存在的情况下添加了@files的一些路径。有些东西发生了变化(Ref'refs / heads / my-branch'被重写了),但不需要的文件(甚至在添加的路径下面)仍在历史中。

1 个答案:

答案 0 :(得分:0)

这是相当愚蠢的,但这是我的错误。 1 我忽略了一个(隐藏的)错误消息。问题是

error: the following files have changes staged in the index:

(隐藏在一行的末尾,后跟可能有数百个文件)。我想,我忘记了-f修饰符(也忘记了在出错时挽救)。

实际上,似乎没有理由将git rm代替/bin/rm--tree-filter一起使用。


1我考虑过删除我的问题,但是,这可能会节省一些时间。