Удалить все теги из репозитория 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 160

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

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

добавление к ответу Стефана, который отсутствовал, как удалить теги из remote. Для 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 tag и подавая этот список в 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