我正在尝试清理私有项目,以便我可以发布它 - 从历史记录中删除杂项文件等。
我正在尝试使用git filter-branch
删除Makefile。这是我正在使用的命令行:
$ git filter-branch -f --index-filter 'git update-index --remove Makefile' 08a7d1..HEAD
但是,当我运行git log -- Makefile
时,它会显示在根提交中添加Makefile,然后在根提交后立即删除。
如何让git filter-branch
在根提交上运行?
答案 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'