Tob*_*ler 8 tags git git-rebase tagname git-tag
我有一些历史改写要做,我现在想保持原始树完好无损.然而,重写的树应该复制先前使用的标签.是否有比使用分支名称添加标签名称更少的手动选项?
Bri*_*ell 16
不,没有像git中的per-branch标签.所有分支和标签都只是Git中的各种引用; ref只是一个指向修订历史记录中特定修订版的名称.举例来说,如果你有devel和master分支机构,并v1.0与v2.0标签,引用会是这个样子:
refs/heads/devel -> *
/ \
* * <- refs/heads/master
| |
* *
\ /
* <- refs/tags/v2.0
|
*
|
* <- refs/tags/v1.0
|
*
正如你所看到的,没有任何东西将这些标签绑在任何分支上; 事实上,所有这些标签都包含在master和devel分支中.通过查看您的.git仓库内部,您可以看到标签上的结构实际上没有那个; 它只是一个包含引用提交的SHA-1的文件.git/refs,或者是一行.git/packed-refs(标签经常出现,packed-refs因为它们不经常更改,而分支通常是单独的文件git/refs).
因此,如果要重写历史记录并保留旧标记,则必须重写标记名称.正如指出的那样,这是使用完成的git filter-branch --tag-name-filter.