Продвинутый Git
1rebase: линейная история2stash: прячем незавершённую работу3git reset и git revert: отмена изменений4cherry-pick: перенос конкретных коммитов5tags: версионирование релизов← вы здесь6Git Workflows: GitFlow, GitHub Flow, Trunk-based
📖 Полная статья по теме →
Урок 5~12 минут

tags: версионирование релизов

Ветки двигаются. Теги — нет. v1.0 всегда будет указывать на один и тот же коммит. Это делает теги идеальными для маркировки релизов.

Два типа тегов

Lightweight (лёгкий) — просто указатель на коммит, как ветка без истории:

bash
git tag v1.0

Annotated (аннотированный) — полноценный объект в Git с автором, датой и сообщением:

bash
git tag -a v1.0 -m "Первый стабильный релиз"

Для релизов всегда используй аннотированные — в них больше метаданных, они видны в git describe.

Создание тегов

bash
# На текущем коммите
git tag v1.0
git tag -a v1.0 -m "Release 1.0"
 
# На конкретном коммите
git tag v0.9 abc1234
git tag -a v0.9 -m "Beta" abc1234

Попробуй в симуляции

Добавляй коммиты и ставь на них теги. Видишь как тег остаётся на месте когда ты делаешь новые коммиты — в отличие от HEAD.

Семантическое версионирование

Стандарт SemVer: vMAJOR.MINOR.PATCH

v1.0.0  — первый релиз
v1.0.1  — исправление бага (patch)
v1.1.0  — новая функция, обратная совместимость (minor)
v2.0.0  — breaking change (major)

Дополнительно:

v1.0.0-beta.1   — бета
v1.0.0-rc.1     — release candidate

Push тегов

git push не отправляет теги автоматически. Нужно явно:

bash
# Один тег
git push origin v1.0
 
# Все теги
git push origin --tags
 
# Только аннотированные (рекомендуется)
git push origin --follow-tags

Просмотр и поиск

bash
git tag                   # все теги
git tag -l "v1.*"         # теги по паттерну
git show v1.0             # информация о теге
git log --oneline --decorate  # теги в истории

Удаление тегов

bash
# Локально
git tag -d v1.0
 
# На remote
git push origin --delete v1.0
# или
git push origin :refs/tags/v1.0

Checkout по тегу

bash
git checkout v1.0
# Внимание: это "detached HEAD" — ты не на ветке!
 
# Лучше создать ветку от тега:
git checkout -b hotfix/v1.0 v1.0

Команды

bash
git tag                          # список тегов
git tag v1.0                     # lightweight тег
git tag -a v1.0 -m "msg"         # annotated тег
git tag -a v1.0 <hash>           # тег на конкретный коммит
git show v1.0                    # показать тег
git push origin --tags           # пушить все теги
git push origin --follow-tags    # пушить только annotated
git tag -d v1.0                  # удалить локально
git push origin --delete v1.0    # удалить на remote
Тег — это постоянная закладка на коммит. В отличие от ветки, он не двигается. v1.0 всегда будет v1.0.
История коммитов — кликни чтобы выбрать
a1b2
init: проект
b2c3
feat: авторизация
c3d4
fix: баги авторизации
d4e5
feat: профиль пользователя
e5f6
feat: настройки
HEAD
Поставить тег
На текущий HEAD
git tag -a v1.0.0 -m "..."
Добавить коммит
Видишь как HEAD двигается, а теги остаются на месте?
💡 Кликни на тег 🏷 чтобы удалить его · Кликни на коммит чтобы выбрать его для тега
УГЛУБЛЁННОЕ ЧТЕНИЕ
Полная статья: Продвинутый Git
Теория, примеры и разбор темы в одном месте