如何在root提交上运行git filter-branch?

时间:2017-05-15 22:29:14

标签: git git-filter-branch

我正在尝试清理私有项目,以便我可以发布它 - 从历史记录中删除杂项文件等。

我正在尝试使用git filter-branch删除Makefile。这是我正在使用的命令行:

$ git filter-branch -f --index-filter 'git update-index --remove Makefile' 08a7d1..HEAD

但是,当我运行git log -- Makefile时,它会显示在根提交中添加Makefile,然后在根提交后立即删除。

如何让git filter-branch在根提交上运行?

2 个答案:

答案 0 :(得分:1)

问题是您指定的提交范围(08a7d1..HEAD)中的启动提交不具有包容性。所以基本上它是说“在 08a7d1之后发生的一切,一直到HEAD。”

将提交范围传递给git filter-branch是可选的。如果省略它,它将在所有提交上运行,一直返回并包括root。所以:

$ git filter-branch -f --index-filter 'git update-index --remove Makefile'

这应该可以解决问题。

答案 1 :(得分:0)

我只需要更改root提交,对于这种更改,我提出的解决方案是在过滤器内部使用(linux)IF语句

# Change ca1215d5bfc9928ef72c92f10dd53d3bc67c6274 for your own root commit ID
git filter-branch --env-filter '
if [ $GIT_COMMIT = ca1215d5bfc9928ef72c92f10dd53d3bc67c6274 ]
then
    # GIT Changes here
fi'