Skip to content

Множественное удаление GIT тегов

Некоторые workflow (например, с большим количеством RC‑тегов на каждый спринт) подразумевают активное использование тегов. Со временем теги захламляют репозиторий, и релиз‑инженерам приходится регулярно их чистить.

Удалять каждый тег по одному — боль. Нам нужен массовый способ.

Цель

  • Найти все теги по маске (например, RC\d+).
  • Удалить их с remote.
  • Удалить их локально.

Рекомендуемый порядок: сначала — на сервере, потом — локально.

Команды

Удаляем подходящие теги с origin:

bash
git tag -l | awk '/^(RC[0-9]+)$/ {print ":refs/tags/" $1}' | xargs git push origin

Удаляем те же теги локально:

bash
git tag -l | awk '/^(RC[0-9]+)$/ {print $1}' | xargs git tag -d

Разбираем первую команду:

  • git tag -l — список всех тегов;
  • awk '/^(RC[0-9]+)$/ {print ":refs/tags/" $1}' — выбираем теги по маске и подготавливаем формат для git push с удалением;
  • xargs git push origin — применяем git push origin :refs/tags/<tag> ко всем найденным тегам.

Во второй команде awk просто печатает имя тега, а xargs git tag -d удаляет его локально.