Теги (Tags)¶
Теги используются для отметки важных точек в истории репозитория, обычно для версий релизов (v1.0, v2.1.3 и т.д.). В отличие от веток, теги не перемещаются — они указывают на конкретный коммит навсегда.
Типы тегов¶
Легковесные теги (Lightweight)¶
Просто указатель на коммит, без дополнительной информации.
git tag v1.0.0-beta
Аннотированные теги (Annotated)¶
Рекомендуемый тип для релизов. Содержит: - Имя тегирующего. - Email. - Дату. - Сообщение тега.
git tag -a v1.0.0 -m "Релиз версии 1.0.0"
Работа с тегами¶
Просмотр тегов¶
# Все теги
git tag
# Теги, соответствующие шаблону
git tag -l "v1.*"
# Информация о конкретном теге
git show v1.0.0
Создание тега¶
На текущий коммит:
git tag -a v1.0.0 -m "Стабильный релиз"
На конкретный коммит:
git tag -a v0.9.0 a1b2c3d -m "Бета-версия"
Отправка тегов на сервер¶
По умолчанию git push не отправляет теги.
# Отправить один тег
git push origin v1.0.0
# Отправить все теги
git push --tags
Удаление тега¶
Локально:
git tag -d v1.0.0
На удаленном сервере:
git push origin --delete v1.0.0
Исправление тега¶
Если вы ошиблись в сообщении или забыли добавить -a:
# Удалить старый тег
git tag -d v1.0.0
# Создать новый
git tag -a v1.0.0 -m "Исправленное сообщение"
Если тег уже отправлен на сервер, нужно удалить его и там:
git push origin --delete v1.0.0
git push origin v1.0.0
Семантическое версионирование (SemVer)¶
Рекомендуется использовать формат MAJOR.MINOR.PATCH:
- MAJOR: Несовместимые изменения API.
- MINOR: Новая функциональность (обратно совместимая).
- PATCH: Исправления багов (обратно совместимые).
Примеры:
- v1.0.0 — первый стабильный релиз.
- v1.0.1 — исправление бага в первой версии.
- v1.1.0 — добавлена новая фича.
- v2.0.0 — критические изменения, ломающие обратную совместимость.
Префикс v не обязателен, но широко используется.
Проверка подписанных тегов¶
Для критически важных релизов можно использовать GPG-подписанные теги:
git tag -s v1.0.0 -m "Подписанный релиз"
Проверка подписи:
git tag -v v1.0.0
Частые ошибки¶
Ошибка: "tag already exists"¶
Тег с таким именем уже есть. Удалите его и создайте заново или используйте другое имя.
Ошибка при push тегов¶
Убедитесь, что тег создан на коммите, который уже отправлен на сервер. Если нет:
git push origin main --tags