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

3

我正在整理一个私人项目,以便可以发布它 - 从历史记录中删除杂项文件等。

我正在尝试使用 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个回答

3
您所指定的提交范围起始提交(08a7d1..HEAD)并不包含在内。简单来说,它的意思是“从08a7d1之后的所有内容一直到HEAD。”
将提交范围传递给git filter-branch是可选的。如果您忽略它,它将运行在包括根提交在内的所有提交上。因此:
$ git filter-branch -f --index-filter 'git update-index --remove Makefile'

那应该能解决问题了。

0

我必须仅更改根提交,为了进行这样的更改,我想出的解决方案是在过滤器内使用(Linux)IF语句

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

不错的建议!只是想指出,if语句并不是一个“Linux”语句。它是一个Unix shell结构,在几乎所有类似Unix的操作系统上都可以运行,包括Linux、*BSD和macOS。 - strugee

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接