Продвинутый Git
Урок 5~12 минут
tags: версионирование релизов
Ветки двигаются. Теги — нет. v1.0 всегда будет указывать на один и тот же коммит. Это делает теги идеальными для маркировки релизов.
Два типа тегов
Lightweight (лёгкий) — просто указатель на коммит, как ветка без истории:
bash
git tag v1.0Annotated (аннотированный) — полноценный объект в 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.0Checkout по тегу
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 двигается, а теги остаются на месте?
💡 Кликни на тег 🏷 чтобы удалить его · Кликни на коммит чтобы выбрать его для тега