Нет, в git нет ничего похожего на тег для каждой ветви.Все ветки и теги - это просто ссылки в Git;ссылка - это просто имя, которое указывает на конкретную ревизию в истории ревизий.Например, если у вас есть ветви 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
).
Поэтому, если вы хотите переписать историю и сохранить старые теги, вам придется переписать имена своих тегов.Как указывает sehe, это делается с помощью git filter-branch --tag-name-filter
.