如何从标签中永久删除git中的文件?

问题描述:

git filter-branch -f --index-filter 'git rm -r --cached --ignore-unmatch mysql_db' HEAD如何从标签中永久删除git中的文件?

这就是我正在做的,以删除mysql_db,这很好。但现在我必须从我所有的标签中完成。我怎样才能做到这一点?

+0

可能重复[为什么git-filter-branch没有重写标签?](http://*.com/questions/7672907/why-has-git-filter-branch-not-rewritten-tags) – 2012-04-20 15:32:00

您必须重写标签的名称,以及(那么他们将指向改写提交):

git filter-branch -f \ 
    --index-filter 'git rm -r --cached --ignore-unmatch mysql_db' \ 
    --tag-name-filter 'cat' -- --all 

使用--all重写所有提交,而不仅仅是到达从目前HEAD提交。

manpage of git filter-branch

--tag-name-filter

[...]

原来的标签不会被删除,但可以覆盖;使用“--tag-name-filter cat”来简单地更新标签。在这种情况下,要非常小心,并确保在转换发生冲突的情况下备份旧标签。

+0

我认为OP想要使用HEAD以外的东西。在你的命令中用“ - --all”替换HEAD应该可以做到。 – ralphtheninja 2012-04-20 15:37:12

+0

这取决于他是否要重写从HEAD或所有提交可到达的所有提交,但是,我同意。我会更新我的问题,以防万一。 – knittl 2012-04-20 15:39:10