W3docs

git tag

Узнайте, что такое теги в Git, как создавать аннотированные и облегчённые теги, просматривать, публиковать и удалять их.

Что такое тег в Git

Тег — это именованная ссылка, указывающая на конкретный коммит в истории Git. В отличие от ветки, которая перемещается вперёд с каждым новым коммитом, тег остаётся привязан к тому коммиту, для которого был создан. Благодаря этому теги идеально подходят для обозначения значимых, постоянных точек в проекте — чаще всего версий релизов, например v1.0.0 или v2.3.1.

На этой странице рассказывается, как создавать два вида тегов (аннотированные и облегчённые), как выводить их список и фильтровать, как помечать прошлые коммиты, а также как публиковать, просматривать и удалять теги.

gittag

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

Чтобы создать тег в Git, выполните команду:

git tag

git tag <name-of-tag>

При создании тега замените <name-of-tag> семантическим идентификатором состояния репозитория — например v1.3. Git поддерживает два вида тегов: аннотированные и облегчённые. Главное различие между ними — объём хранимых метаданных.

Аннотированные и облегчённые теги

Выбор правильного вида тега важнее, чем кажется:

  • Аннотированные теги хранятся как полноценные объекты в базе данных Git. Они записывают имя, email и дату создавшего тег, содержат сообщение и могут быть криптографически подписаны и проверены с помощью GPG (GNU Privacy Guard). Используйте их для релизов и всего, что публикуется.
  • Облегчённые теги — просто имя, указывающее на коммит: никаких дополнительных метаданных, сообщений или подписей. Они ведут себя как личная закладка. Используйте их для временных или локальных пометок.

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

Аннотированные теги

Git хранит аннотированные теги как полноценные объекты в своей базе данных. Они содержат дополнительные метаданные: имя, email и дату создавшего тег. Как и коммиты, аннотированные теги включают сообщение.

Команда ниже создаёт новый аннотированный тег с идентификатором v1.3. После этого откроется настроенный текстовый редактор с предложением ввести сообщение тега.

git annotated tag

git tag -a v1.3

Чтобы передать сообщение непосредственно в команде и не открывать редактор, используйте опцию -m:

git annotated tag with inline message

git tag -a v1.3 -m "Release version 1.3"

Облегчённые теги

Команда ниже создаёт облегчённый тег с идентификатором v1.3-lw. Облегчённые теги создаются без опций -a, -s или -m. Они просто хранят указатель на конкретный объект-коммит в директории .git/refs/tags/.

git lightweight tag

git tag v1.3-lw

Список тегов

Выполните команду ниже, чтобы получить список сохранённых тегов:

git tag command

git tag

В результате вы увидите вывод, похожий на следующий:

git tag output

v0.10.0
v0.10.0-rc1
v0.11.0
v0.11.0-rc1
v0.11.1
v0.11.2
v0.12.0
v0.12.0-rc1
v0.12.1
v0.12.2
v0.13.0
v0.13.0-rc1
v0.13.0-rc2

Для фильтрации списка тегов можно использовать опцию -l с шаблоном подстановки:

git tag with wildcard

git tag -l *-rc*
v0.10.0-rc1
v0.11.0-rc1
v0.12.0-rc1
v0.13.0-rc1
v0.13.0-rc2
v0.14.0-rc1
v0.9.0-rc1
v15.0.0-rc.1
v15.0.0-rc.2
v15.4.0-rc.3

Пометка прошлых коммитов

По умолчанию git tag создаёт тег на коммите, на который указывает HEAD. Можно также передать конкретную ссылку на коммит, чтобы пометить более ранний коммит. Выполните команду git log, чтобы просмотреть предыдущие коммиты. В примере ниже для нового тега используется коммит слияния. Чтобы сослаться на конкретный коммит, укажите его SHA-хеш:

git log

git log --pretty=oneline
29389857951b64cf874c3557a0f3547bd83b899a Merging branch 'crossword'
b4a5697498bd301d84096da251c98a07c7723e65 init method for crossword
89f3aaab4479697da7686c15f77a3d64d9165190 little changes in logic
3a4a271eda8725415634dd79daabbc4d9b6008e Merging branch 'how-it-works'

Выполните команду git tag, чтобы создать новый аннотированный тег с идентификатором v1.2 для коммита, выбранного в предыдущем примере:

git tag for old commits

git tag -a v1.2 29389857951b64cf874c3557a0f3547bd83b899a

Замена старых тегов

Попытка создать тег с уже существующим идентификатором приведёт к ошибке. Используйте опцию -f (force), чтобы обновить существующий тег — это перезапишет его прежнее содержимое.

git tag replacing old tags

git tag -a -f v1.3 29389857951b64cf874c3557a0f3547bd83b899a

Публикация тегов на удалённом сервере

Теги не отправляются автоматически вместе с git push — по умолчанию git push передаёт коммиты, но оставляет теги локально. Их необходимо публиковать явно, чтобы все, кто клонирует репозиторий, их получили.

Чтобы отправить один тег, передайте его имя команде git push:

git tag, pushing to remote

git push origin v1.3
Counting objects: 9, done.
Delta compression using up to 5 threads.
Compressing objects: 100% (8/8), done.
Writing objects: 100% (12/12), 2.05 KiB | 0 bytes/s, done.
Total 12 (delta 3), reused 0 (delta 0)
To [email protected]:gr8/gittagdocs.git
* [new tag] v1.3 -> v1.3

Чтобы отправить все локальные теги, которых ещё нет на удалённом сервере, используйте опцию --tags:

git push all tags

git push origin --tags

Просмотр тега

Используйте git show, чтобы посмотреть данные, хранящиеся в теге. Для аннотированного тега команда выводит метаданные тега (создавший тег, дату, сообщение), а затем — коммит, на который он указывает:

git show on an annotated tag

git show v1.3
tag v1.3
Tagger: Jane Doe <[email protected]m>
Date:   Mon Jun 9 14:21:03 2025 +0000

Release version 1.3

commit 29389857951b64cf874c3557a0f3547bd83b899a
Author: Jane Doe <[email protected]m>
Date:   Mon Jun 9 14:18:55 2025 +0000

    Merging branch 'crossword'

Переключение на тег

Вы можете использовать команду git checkout для проверки помеченного коммита. При этом репозиторий переходит в состояние отсоединённого HEADHEAD указывает непосредственно на коммит, а не на ветку. Новые коммиты, сделанные в этом состоянии, не будут принадлежать ни одной ветке и будут доступны только по SHA-хешу, поэтому после переключения они могут быть потеряны.

git tag, checking out a tag

git checkout v1.3

Если вы хотите продолжить работу с этой точки, создайте ветку на месте:

branch from a tag

git checkout -b release-1.3 v1.3

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

Чтобы удалить локальный тег, передайте опцию -d и идентификатор тега команде git tag. Смотрите пример ниже:

git tag, deleting tags

git tag
v1
v2
v3
git tag -d v1
git tag
v2
v3

Удаление тега локально не удаляет его с удалённого сервера. Чтобы удалить тег и на удалённом сервере, отправьте запрос на удаление:

git delete remote tag

git push origin --delete v1

Связанные темы

  • git log — найдите коммит, который хотите пометить тегом.
  • git push — опубликуйте теги на удалённом сервере.
  • git branch — превратите помеченный коммит в ветку для дальнейшей работы.

Практика

Практика
Каковы возможности и опции команды 'git tag' в Git?
Каковы возможности и опции команды 'git tag' в Git?
Was this page helpful?