linuxlab.io
Учебники▾
  • Линукс и сети
    Файловая система, процессы, TCP/IP, BGP и OSPF
    →
  • Terraform и IaC
    HCL, state, plan/apply на sandbox LocalStack
    →
  • Git и GitHub
    Объектная модель, plumbing, ветвление, GitHub Actions
    →
Все учебники →
ЦеныО платформеВойтиСоздать аккаунт
/
Intro
Lessons
Footer
linuxlab-УчебникиЦеныО платформеКонфиденциальность и куки
Copyright © 2026 LinuxLab. Все права защищены.
linuxlab.io
Учебники▾
  • Линукс и сети
    Файловая система, процессы, TCP/IP, BGP и OSPF
    →
  • Terraform и IaC
    HCL, state, plan/apply на sandbox LocalStack
    →
  • Git и GitHub
    Объектная модель, plumbing, ветвление, GitHub Actions
    →
Все учебники →
ЦеныО платформеВойтиСоздать аккаунт
/
  • Введение
  • Главы
  • How it works
  • Уроки
  • База знаний
  • Собеседование
home/git/kb/Объектная модель/tag

kb/objects ── Объектная модель ── intermediate

Tag

Именованный указатель на коммит. Два вида: lightweight (просто файл с SHA в `refs/tags/`) и annotated (отдельный объект в `objects/` с автором, датой, подписью). Для релизов - annotated.

view as markdownaka: git-tag, annotated-tag, lightweight-tag

Тег в Git - это именованный указатель на объект с человекочитаемым именем. Почти всегда указывает на commit и используется для отметки релизов: «вот этот коммит - это версия 1.0». Формально annotated tag может указывать и на blob, tree или другой tag - но на практике это редкая экзотика.

В отличие от branch, тег не двигается. После создания тег привязан к коммиту, на который указывал в момент создания, и остаётся там навсегда (если только не удалить и не пересоздать заново).

Lightweight tag

Просто файл .git/refs/tags/<имя> с SHA коммита внутри. Никакого объекта в .git/objects/ не создаётся:

bash
git tag v1.0
cat .git/refs/tags/v1.0
# a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0

По сути - то же, что branch, но не двигается с новыми коммитами.

Annotated tag

Полноценный объект в .git/objects/, с автором, датой, сообщением, и опционально GPG-подписью:

bash
git tag -a v1.0 -m "Первая стабильная версия"
git cat-file -p v1.0
# object a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0
# type commit
# tag v1.0
# tagger Имя Фамилия <email@example.com> 1716817500 +0300
#
# Первая стабильная версия

Файл .git/refs/tags/v1.0 указывает не на коммит, а на этот tag-объект, который в свою очередь указывает на коммит.

Какой использовать

  • Для релизов и публичных меток - annotated. У них есть автор, дата, сообщение. Их можно подписать GPG. История релизов отслеживается.
  • Для временных пометок («глянь на этот коммит», «здесь застряли, разобраться позже») - lightweight. Создаются мгновенно, без редактора.

Подписанные теги

Annotated-теги можно подписать GPG-ключом:

bash
git tag -s v1.0 -m "Релиз 1.0"

Подпись хранится в самом tag-объекте. Проверить - git tag -v v1.0. Это даёт криптографическое подтверждение, что тег создан именно тем человеком, чей ключ указан, и не был подделан.

Отправка на сервер

Теги не пушатся автоматически вместе с коммитами. Чтобы отправить на сервер:

bash
git push origin v1.0          # один конкретный тег
git push origin --tags        # все локальные теги
git push origin --follow-tags # пушит annotated-теги, связанные с
                              # коммитами, которые тоже пушатся

Semver

Конвенция именования для релизов: vMAJOR.MINOR.PATCH. Подробнее - semver.

§ команды

bash
git tag v1.0

Создать lightweight tag на HEAD

bash
git tag -a v1.0 -m "..."

Создать annotated tag

bash
git tag -s v1.0 -m "..."

Создать подписанный annotated tag

bash
git tag -l

Список всех тегов

bash
git tag -d v1.0

Удалить тег локально

bash
git push origin --tags

Запушить все теги на сервер

§ см. также

  • commitCommitОбъект Git: снимок состояния всего проекта (через tree) плюс метаданные - автор, коммиттер, дата, родители, сообщение. SHA коммита включает SHA родителя, что делает историю криптографически связанной.
  • branchВетка (branch)Ветка в Git - это файл в `.git/refs/heads/`, в котором лежит SHA одного коммита. Создание, переключение и удаление веток тривиальны, потому что данных в ветке - 41 байт.
  • gpg-signingGPG-подпись коммитовКоммиты в Git можно подписывать GPG-ключом (или SSH-ключом начиная с Git 2.34). Подпись криптографически доказывает, что в момент коммита у подписавшего был доступ к private key. Связь «ключ → конкретный человек» обеспечивается уже не Git, а проверкой ключа (web of trust в OpenPGP, подтверждение через GitHub-аккаунт и т.п.) - сам Git не проверяет, кто ты есть.
Footer
linuxlab-
Copyright © 2026 LinuxLab. Все права защищены.
Учебники
Цены
О платформе
Конфиденциальность и куки