Удалить все теги из репозитория Git

Я хочу удалить все теги из репозитория Git. Как я могу это сделать?

используя git tag -d tagname удалить тег tagname локально, и с помощью git push --tags Я обновляю теги на провайдере git.

пробовал:

git tag -d *

но я вижу, что * означает, что файлы из текущего каталога.

$ git tag -d *
error: tag 'file1' not found.
error: tag 'file2' not found.
...

считайте меня много тегов, и я хочу удалить их все.

9 ответов


git tag | xargs git tag -d

просто используйте философию Linux, где вы передаете все. В Windows используйте git bash с той же командой.


чтобы удалить удаленные теги (перед удалением локальных тегов), просто сделайте:

git tag -l | xargs -n 1 git push --delete origin

а затем удалите локальные копии:

git tag | xargs git tag -d

Примечание: добавлен этот ответ для будущих гуглеров.


это может быть более эффективным, чтобы нажать Удалить все теги в одной команде. Особенно если у вас их несколько сотен.

в подходящей оболочке без windows удалите все удаленные теги:

git tag | xargs -L 1 | xargs git push origin --delete

затем удалите все локальные теги:

git tag | xargs -L 1 | xargs git tag --delete

это должно быть нормально, пока у тебя нет ' в именах тегов. Для этого следующие команды должны быть в порядке.

git tag | xargs -I{} echo '"{}"' | tr \n \0 | xargs --null git push origin --delete
git tag | xargs -I{} echo '"{}"' | tr \n \0 | xargs --null git tag --delete

другие способы получения списка строк, обертывания их в кавычки, создания их возможно, существует одна строка, а затем передача этой строки команде. Учитывая, что это конечная среда для снятия шкуры с кошки и все такое.


добавление к ответу Стефана, который отсутствовал, как удалить теги с удаленного. В Windows powershell это можно выполнить для удаления удаленных тегов, за которыми следуют локальные теги.

git tag | foreach-object -process { git push origin --delete $_ }
git tag | foreach-object -process { git tag -d $_ }  

для пользователей Windows, использующих PowerShell:

git tag | foreach-object -process { git tag -d $_ }

Это удаляет все теги, возвращенные git tag при выполнении git tag -d для каждой строки, возвращаемой.


для пользователей windows:

это удаляет все локальные Теги, запустив тег git и подав этот список в git tag-d:

FOR /f "tokens=*" %a in ('git tag') DO git tag -d %a

(найдено на:https://gist.github.com/RandomArray/fdaa427878952d9768b0)


вы также можете использовать:

git tag -d $(git tag)

Если у вас нет тегов в локальном РЕПО, вы можете удалить удаленные теги без необходимости переносить их в локальное РЕПО.

git ls-remote --tags --refs origin | cut -f2 | xargs git push origin --delete

Не забудьте заменить "origin" на имя удаленного обработчика.


поскольку все эти параметры работают только в linux, вот эквивалент windows для любого, кто должен иметь дело с этим:FOR /F usebackq %t IN (git tag) DO @git tag --delete %t