Удаление и управление тегами в Git

Ниже описаны основные команды для удаления тегов в Git и различия между лёгкими и аннотированными тегами.


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

1. Локальное удаление тега

git tag -d v0.1.0

Что делает

Как это работает “под капотом”

  1. Git хранит теги как файлы в каталоге .git/refs/tags/.
  2. Команда удаляет файл:
   .git/refs/tags/v0.1.0
  1. История коммитов не меняется, просто исчезает локальный указатель v0.1.0.

Пример вывода

$ git tag -d v0.1.0
Deleted tag 'v0.1.0' (was a1b2c3d)

Где a1b2c3d — SHA-1 коммита, на который указывал удалённый тег.


2. Удаление тега на удалённом сервере

git push --delete origin v0.1.0

Что делает

Как это работает “под капотом”

  1. Git преобразует команду в удалённый запрос удаления рефа:
   :refs/tags/v0.1.0
  1. Отправляет запрос на сервер origin, где удаляется файл refs/tags/v0.1.0.
  2. При последующем git fetch или новом клонировании этот тег больше не будет виден.

Пример вывода

$ git push --delete origin v0.1.0
To git@github.com:yourname/your-repo.git
 - [deleted]         v0.1.0

3. Полный сценарий: удаление и перевыпуск тега

# 1. Локально удаляем старый тег
git tag -d v0.1.0

# 2. Удаляем его на удалённом сервере
git push --delete origin v0.1.0

# 3. (Опционально) Создаём новый тег на другом коммите
git tag -a v0.1.0 -m "Release version 0.1.0"

# 4. Пушим новый тег на сервер
git push origin v0.1.0

Типы тегов в Git

В Git существуют два основных вида тегов:

  1. Лёгкие (lightweight) теги
  2. Аннотированные (annotated) теги

Лёгкий тег (git tag v0.1.0)

git tag v0.1.0

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

git tag -a v0.1.0 -m "Release version 0.1.0"

Сравнительная таблица

Характеристика Лёгкий тег Аннотированный тег
Объект в базе данных Отсутствует Присутствует (тип tag)
Метаданные (автор, дата) Нет Да
Сообщение Нет Да (через -m)
Возможность GPG-подписи Нет Да (ключ -s)
Вывод git show <tag> Показывает сразу коммит Сначала показывает данные тега, затем коммит

Итог


Revision #1
Created 20 June 2025 08:42:20 by Admin
Updated 20 June 2025 08:48:27 by Admin