Как удалить тег Git, который уже был добавлен?
Вам просто нужно нажать «пустую» ссылку на имя удаленного тега:
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
Опуская исходную ссылку (часть перед двоеточием), вы помещаете 'ничто' в место назначения, удаляя ссылку на удаленном конце.
git push --delete origin tag1 tag2
. То же самое относится и к удалению локальных теговgit tag -d tag1 tag2
tag
привязан только к одному коммиту . Из-за этого название ветви не имеет значения.git tag -d `git tag`
будут удалены все локальные теги. То же самое относится кgit push --delete origin `git tag`
предположению, что вы извлекли удаленные теги локально. Это было удобно в тестовой среде.Более простой способ
Синтаксис двоеточия с префиксом IMO в этой ситуации немного странный
источник
git push --delete origin "TAGNAME"
где TAGNAME - это имя исходного тега.tag
перед именем тега, чтобы убедиться, что вы получите тег, а не ветвь.refs/tags/
, как это:refs/tags/v2.3.1
.Если у вас есть удаленный тег
v0.1.0
для удаления, а ваш удаленный естьorigin
, то просто:Если вам также нужно удалить тег локально:
См. Ответ Адама Франко для объяснения необычного
:
синтаксиса Git для удаления.источник
fatal: remote part of refspec is not a valid name in :/refs/tags/0.0.1
...?:tagname
должно работать для удаленного удаления.Удалите все локальные теги и получите список удаленных тегов :
Удалить все удаленные теги
Очистить локальные теги
источник
Чтобы удалить тег из удаленного хранилища:
Вы также можете удалить тег локально:
источник
git push --delete origin TAGNAME && git tag -d TAGNAME
Из вашего терминала сделайте это:
Теперь зайдите на Github.com и обновите, они исчезают.
источник
your_tag_name
из локального репо.your_tag_name
из удаленного репо.источник
Удалить локальный тег '12345'
Удалить удаленный тег «12345» (например, версия GitHub тоже)
альтернативный подход
источник
Просто обратите внимание, что если у вас есть удаленная ветвь с именем удаленного тега, эти команды неоднозначны:
Поэтому вы должны использовать эту команду для удаления тега:
и этот, чтобы удалить ветку:
Если нет, вы получите сообщение об ошибке:
источник
В 100 раз более быстрый метод для тысяч удаленных тегов
После прочтения этих ответов, при необходимости удалить более 11 000 тегов, я выучил эти методы, полагаясь или
xargs
занимая слишком много времени, если у вас нет часов для записи.Изо всех сил я нашел два гораздо более быстрых способа. Для обоих начните с
git tag
илиgit ls-remote --tags
составьте список тегов, которые вы хотите удалить на пульте дистанционного управления. В примерах ниже вы можете опустить или заменитьsorting_proccessing_etc
любойgrep
ING,sort
ING,tail
ИНГ илиhead
ИНГ вы хотите ( например , иgrep -P "my_regex" | sort | head -n -200
т.д. ):Этот первый метод на сегодняшний день является самым быстрым, может быть, в 20-100 раз быстрее, чем при использовании
xargs
, и работает одновременно с несколькими тысячами тегов за раз.Как это работает? Обычный список тегов, разделенных строками, преобразуется в одну строку разделенных пробелами тегов, каждый из которых начинается с символа
:
так. , ,Использование
git push
с этим тегом формата ничего не помещает в каждую удаленную ссылку, стирая ее (нормальный формат для этого способа -local_ref_path:remote_ref_path
).Второй метод приведен в качестве отдельного ответа в другом месте на этой же странице
После обоих этих методов вы, вероятно, захотите удалить свои локальные теги. Это намного быстрее, поэтому мы можем вернуться к использованию
xargs
иgit tag -d
, что достаточно.ИЛИ аналогично удаленному удалению:
источник
Если вы используете SourceTree - отличный графический интерфейс Git - вы можете легко сделать это без командной строки, выполнив следующие действия:
YOUR_TAG_NAME теперь будет удален из вашего локального хранилища и всех удаленных устройств - будь то GitHub, BitBucket или где-либо еще, что вы указали в качестве удаленного для этого хранилища.
Кроме того, если вы удалили тег локально, но не в удаленных источниках, и хотите удалить его везде, просто создайте новый тег с тем же именем и прикрепленный к тому же коммиту, что и источники. Затем повторите шаги выше, чтобы удалить везде.
источник
Если вы создали тег с именем
release01
в Git-репозитории, вы можете удалить его из своего репозитория, выполнив следующие действия:Чтобы удалить один из репозитория Mercurial:
Пожалуйста, обратитесь https://confluence.atlassian.com/pages/viewpage.action?pageId=282175551
источник
Если вы используете PowerShell и хотите удалить несколько из них:
Конечно, вы также можете отфильтровать их перед удалением:
источник
Как предложил @CubanX, я отделил этот ответ от моего оригинала:
Вот метод, который в несколько раз быстрее
xargs
и может масштабироваться гораздо больше при настройке. Он использует Github API , токен личного доступа и использует утилитуparallel
.parallel
имеет много режимов работы, но обычно распараллеливает любую команду, которую вы ей даете, позволяя вам устанавливать ограничения на количество процессов. Вы можете изменить--jobs 2
параметр, чтобы разрешить более быструю работу, но у меня были проблемы с ограничениями скорости Github , которые в настоящее время составляют 5000 / час, но, похоже, также имеют недокументированное краткосрочное ограничение.После этого вы, вероятно, захотите удалить свои локальные теги. Это намного быстрее, поэтому мы можем вернуться к использованию
xargs
иgit tag -d
, что достаточно.источник
Другие ответы указывают, как это сделать, но вы должны помнить о последствиях, так как это удаленное хранилище.
Страница руководства по тегу git в разделе « Повторная маркировка » содержит хорошее объяснение того, как вежливо информировать других пользователей удаленного репо об изменениях. Они даже предоставляют удобный шаблон объявлений, чтобы сообщить, как другие должны получить ваши изменения.
источник
Я хотел удалить все теги, кроме тех, которые соответствуют шаблону, чтобы я мог удалить все, кроме последних двух месяцев производственных тегов, вот что я использовал с большим успехом:
Удалить все удаленные теги и исключить выражение из удаления
Удалить все локальные теги и исключить выражение из удаления
источник
Простой скрипт для удаления данного тега из локального и исходного местоположений. С проверкой, если тег действительно существует.
Как пользоваться:
источник
Похоже, много работы для чего-то
xargs
уже делает. Оглядываясь назад в этой ветке, я предполагаю, что медлительность, сxargs
которой вы столкнулись, заключается в том, что первоначальный ответ использовалсяxargs -n 1
тогда, когда это действительно не нужно.Это эквивалентно вашему методу 1, за исключением того, что он
xargs
автоматически определяет максимальную длину командной строки:xargs
также может запускать процессы параллельно. Способ 2 сxargs
:Выше используется максимум 5 процессов для обработки максимум 100 аргументов в каждом процессе. Вы можете поэкспериментировать с аргументами, чтобы найти то, что лучше всего подходит для ваших нужд.
источник
Если у вас есть созданный тег, начинающийся с символа # , например
#ST002
, вы можете обнаружить, что вы не можете удалить его, используя обычные шаблоны. т.е.Не удалит тег, но обернет его в строковый литерал примерно так
Это удалит это. Надеясь, это поможет кому-то, кто совершил ошибку, используя # для написания имен тегов.
источник
Вот локальный тестовый пример для локального тестирования, не связываясь с удаленным:
источник
Привет просто хотел поделиться псевдонимом, который я создал, который делает то же самое:
Добавьте следующее в ваш ~ / .gitconfig
Использование выглядит так:
источник