Обновлено:
Со временем в репозитории накапливаются теги: старые feature-ветки, неудачные эксперименты, дубликаты. Они мешают ориентироваться, забивают вывод git tag -l и могут путать в CI/CD. Покажу, как аккуратно удалить теги, которые не относятся к ветке origin/develop, — с бэкапами и возможностью отката.
Шаг 1. Создаём «страховку»
Сохраняем исходный список тегов:
git tag -l > tags-before.txt
Теперь у вас есть точка восстановления.
Шаг 2. Находим кандидатов на удаление
Выполняем скрипт, который отберёт теги вне истории origin/develop:
git tag -l | while read tag; do
commit=$(git rev-parse "$tag^{commit}" 2>/dev/null)
if [ -n "$commit" ]; then
if ! git merge-base --is-ancestor "$commit" origin/develop 2>/dev/null; then
echo "$tag"
fi
fi
done > tags-to-delete.txt
Можно заменить origin/develop на любую другую ветку (например, main).
Шаг 3. Проверяем список
Выводим теги, которые система хочет удалить:
cat tags-to-delete.txt
Обязательно проверьте: нет ли среди них важных (например, тегов релизов).
Шаг 4. Удаляем теги
Вариант А (аккуратно, по одному):
git tag -d имя_тега
git push origin --delete имя_тега
Вариант Б (массово, если уверены):
xargs -L1 git tag -d < tags-to-delete.txt
xargs -L1 git push origin --delete < tags-to-delete.txt
Удаление на удалённом репозитории — необратимо. Убедитесь, что теги не используются в CI/CD или документации.
Шаг 5. Проверяем результат
Синхронизируем данные и сохраняем финальный список:
git fetch --prune --prune-tags
git tag -l > tags-after.txt
Сравните tags-before.txt и tags-after.txt — всё должно сойтись.
Что делать, если ошибся?
Если случайно удалили нужный тег:
- Найдите хеш коммита (из
tags-before.txtили черезgit log). - Восстановите тег:
git tag имя_тега хеш_коммита
git push origin имя_тега
Итоговые файлы
tags-before.txt— исходный список.tags-to-delete.txt— кандидаты на удаление.tags-after.txt— финальный список.
А вы часто чистите теги в своих репозиториях?