Как удалить удаленный тег? - PullRequest
2848 голосов
/ 30 марта 2011

Как удалить тег Git, который уже был добавлен?

Ответы [ 21 ]

4761 голосов
/ 30 марта 2011

Вам просто нужно нажать «пустую» ссылку на имя удаленного тега:

git push origin :tagname

Или, более выразительно, использовать опцию --delete (или -d, если ваша версия git старшечем 1.8.0):

git push --delete origin tagname

Обратите внимание, что в git есть пространство имен тегов и пространство имен веток, поэтому вы можете использовать одно и то же имя для ветви и для тега.Если вы хотите убедиться, что не можете случайно удалить ветку вместо тега, вы можете указать полный ref, который никогда не будет удалять ветку:

git push origin :refs/tags/tagname

Если вам также нужно удалить локальный тег, используйте:

git tag --delete tagname

Фон

Передача ветки, тега или другого ссылки в удаленный репозиторий включает указание «какой репозиторий, какой источник, какой пункт назначения?»

git push remote-repo source-ref:destination-ref

Пример реального мира, в котором вы перемещаете свою основную ветвь в основную ветвь источника:

git push origin refs/heads/master:refs/heads/master

, которая из-за путей по умолчанию может быть сокращена до:

git push origin master:master

Теги работают одинаково:

git push origin refs/tags/release-1.0:refs/tags/release-1.0

Который также можно сократить до:

git push origin release-1.0:release-1.0

Опуская ссылку на источник (часть перед двоеточием), вы нажимаете 'ничто'к месту назначения, удалив ссылку на удаленном конце.

326 голосов
/ 09 октября 2012

Более простой способ -

git push --delete origin YOUR_TAG_NAME

Синтаксис двоеточия с префиксом IMO в этой ситуации немного странный

185 голосов
/ 21 июля 2012

Если у вас есть удаленный тег v0.1.0, который вы хотите удалить, и ваш пульт имеет значение origin, тогда просто:

git push origin :refs/tags/v0.1.0

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

git tag -d v0.1.0

См. Адам Франко * Ответ 1011 * для объяснения необычного синтаксиса Git для удаления :.

97 голосов
/ 02 апреля 2013

Удалить все локальные теги и получить список удаленных тегов :

git tag -l | xargs git tag -d
git fetch

Удалить все удаленные теги

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

Очистить локальные теги

git tag -l | xargs git tag -d
29 голосов
/ 04 сентября 2014

Чтобы удалить тег из удаленного хранилища:

git push --delete origin TAGNAME

Вы также можете удалить тег локально:

git tag -d TAGNAME
23 голосов
/ 27 июня 2016

Из вашего терминала сделайте следующее:

git fetch
git tags
git tag -d {tag-name}
git push origin :refs/tags/{tag-name}

Теперь перейдите на Github.com и обновите, они исчезают.

14 голосов
/ 05 мая 2016

Просто обратите внимание, что если у вас есть удаленная ветвь с именем удаленного тега, эти команды неоднозначны:

git push origin :tagname
git push --delete origin tagname

Поэтому вы должны использовать эту команду для удаления тега:

git push origin :refs/tags/<tag>

и этот, чтобы удалить ветку:

git push origin :refs/heads/<branch>

Если нет, вы получите ошибку, подобную этой:

error: dst refspec <tagname> matches more than one.
error: failed to push some refs to '<repo>'
11 голосов
/ 23 марта 2018

Удалить локальный тег '12345'

git tag -d 12345

Удалить удаленный тег '12345' (например, версия GitHub тоже)

git push origin :refs/tags/12345

альтернативный подход

git push --delete origin tagName
git tag -d tagName

enter image description here

9 голосов
/ 11 ноября 2014

Если вы создали тег с именем release01 в репозитории Git, вы удалили бы его из своего репозитория, выполнив следующие действия:

git tag -d release01 
git push origin :refs/tags/release01 

Чтобы удалить один из репозитория Mercurial:

hg tag --remove featurefoo

Пожалуйста, укажите https://confluence.atlassian.com/pages/viewpage.action?pageId=282175551

7 голосов
/ 15 апреля 2017

Более чем в 100 раз более быстрый метод для тысяч удаленных тегов

После прочтения этих ответов, когда мне нужно было удалить более 11 000 тегов, я изучил эти методы, полагаясь на xargs, что занимает слишком много времени, если у вас нет часов для записи.

Изо всех сил, я нашел два намного более быстрых способов. Для обоих начните с git tag или git ls-remote --tags, чтобы составить список тегов, которые вы хотите удалить на пульте дистанционного управления. В приведенных ниже примерах вы можете опустить или заменить sorting_proccessing_etc на любой grep ing, sort ing, tail ing или head ing, который вы хотите ( например grep -P "my_regex" | sort | head -n -200 и т. Д. ):


Этот первый метод на сегодняшний день является самым быстрым, может быть * в 1023 * 20-100 раз быстрее, чем при использовании xargs, и работает как минимум с несколькими тысячами тегов одновременно.

git push origin $(< git tag | sorting_processing_etc \
| sed -e 's/^/:/' | paste -sd " ") #note exclude "<" for zsh

Как это работает? Обычный список тегов, разделенных строками, преобразуется в одну строку тегов, разделенных пробелами, каждый из которых начинается с :. , .

tag1   becomes
tag2   ======>  :tag1 :tag2 :tag3
tag3

Использование git push с этим тегом формата помещает ничто в каждую удаленную ссылку, стирая ее (нормальный формат для нажатия этого пути - local_ref_path:remote_ref_path).

Второй метод приводится в отдельном ответе в другом месте на этой же странице


После обоих этих методов вы, вероятно, захотите удалить свои локальные теги. Это намного быстрее, поэтому мы можем вернуться к использованию xargs и git tag -d, что достаточно.

git tag | sorting_processing_etc | xargs -L 1 git tag -d

ИЛИ аналогично удаленному удалению:

git tag -d $(< git tag | sorting_processing_etc | paste -sd " ")
...