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

Mal*_*Box 9 git git-filter-branch

我需要将我的git repo分成两部分.我使用了这里显示的步骤:Detach(move)子目录到单独的Git存储库中

我使用的命令是:

 git filter-branch --subdirectory-filter ABC HEAD -- --all
Run Code Online (Sandbox Code Playgroud)

这似乎很好,并留下了ABC作为根.

但是现在,如果我尝试检查在拆分回购之前存在的标记:

 git checkout an-old-tagname
Run Code Online (Sandbox Code Playgroud)

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

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

如何重新编写标签,以便我可以回到过去,同时仍然将ABC作为回购的根源?

seh*_*ehe 19

你需要指定

--tag-name-filter cat
Run Code Online (Sandbox Code Playgroud)

也重写标签

现在,你可以做到

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

where ...其他过滤器选项...重复您之前应用的过滤器.