git tag: метки версий и релизов

Обновлено 31 июля 2026 г.

Метка (tag) - это постоянное имя для одного конкретного коммита, и в отличие от ветки она никуда не двигается. Ветка уезжает вперёд с каждым коммитом, а v1.0 через три года указывает ровно туда же, куда указывала в день релиза.

Метки ставят там, где важно вернуться к точному состоянию: версия, релиз, вариант, отправленный заказчику.

$ git tag -a v1.0 -m "first release"
$ git tag
v0.9
v1.0

Лёгкие и аннотированные

Лёгкая метка (git tag v0.9) - просто имя для хеша коммита, больше в ней ничего нет. Годится как временная закладка для себя.

Аннотированная метка (git tag -a v1.0 -m "...") - отдельный объект в репозитории: у неё есть автор, дата и сообщение. Именно её ставят на релизы: через год пригодится подпись, кто пометил этот коммит и зачем.

$ git show v1.0
tag v1.0
Tagger: Anna Petrova <anna@example.com>
Date:   Tue Jul 21 21:37:52 2026 -0400

first release

commit a66eee41906fb21dff6996229c345e4ddb4386eb

Разницу видно и в списке с сообщениями. У лёгкой метки своего сообщения нет, поэтому -n показывает заголовок коммита, на который она стоит:

$ git tag -n
v0.9            bob fixes typo
v1.0            first release

$ git tag -l "v1.*"       # фильтр по шаблону
v1.0

Метку можно поставить задним числом, назвав хеш: git tag -a v0.8 773e133. А посмотреть проект таким, каким он ушёл в релиз, помогает git switch --detach v1.0. Про этот режим без ветки - статья detached HEAD.

Метки не уезжают с обычным push

git push отправляет коммиты веток, метки он не трогает. Их посылают отдельно:

$ git push origin v1.0
To github.com:username/my-project.git
 * [new tag]         v1.0 -> v1.0

$ git push --tags         # отправить все метки сразу

Удаляются они тоже в двух местах: git tag -d v0.9 убирает метку у тебя, git push origin --delete v0.9 - на сервере.

Частые ошибки

Поставил метку, собрал релиз, а на GitHub его нет: забыл git push origin v1.0. Это первое, что стоит проверить.

Двигать уже отправленную метку через git tag -f - плохая идея. У всех, кто её успел забрать, v1.0 останется указывать на старый коммит, и разговор про «ту самую версию» превращается в путаницу. Выпусти v1.0.1.

Где это в учебнике

Раздел «Что дальше» в итоговом проекте.