为什么git-filter-branch没有重写标签?

时间:2011-10-06 10:14:10

标签: git git-filter-branch

我需要将我的git repo分成两部分。我使用了此处显示的步骤:Detach (move) subdirectory into separate Git repository

我使用的命令是:

 git filter-branch --subdirectory-filter ABC HEAD -- --all

似乎工作得很好,并留下了ABC作为根。

但是现在如果我尝试签出在拆分回购之前存在的标签:

 git checkout an-old-tagname

它正在重新创建旧的目录结构 - 所以重新创建ABC作为子目录,以及XYZ1和XYZ2。

我知道repo在那个时间点的确是如何看待的 - 但是我希望标签只引用ABC位,好像它们当时已经在根部。我认为这就是filter-branch在重写历史时所做的事情,但显然我并没有正确地理解它。

我怎样才能重新编写标签,这样我可以回到过去,同时仍然将ABC作为回购的根源?

1 个答案:

答案 0 :(得分:18)

您需要指定

--tag-name-filter cat

也可以重写标签

现在,你可以做到

  

git filter-branch --tag-name-filter cat ...其他过滤器选项... -- --tags

其中 ...其他过滤器选项... 重复您先前应用的过滤器。