Jak usunąć Git remote tag?

Jak usunąć znacznik git, który został już wypchnięty?

 2247
Author: markdorison, 2011-03-30

18 answers

Wystarczy wcisnąć "puste" odniesienie do nazwy zdalnego tagu:

git push origin :tagname

Lub, bardziej wyraziście, użyj opcji --delete (lub -d jeśli Twoja wersja git jest starsza niż 1.8.0):

git push --delete origin tagname

Jeśli chcesz również usunąć lokalny tag, użyj:

git tag --delete tagname

Tło

Przepchnięcie gałęzi, znacznika lub innego ref do zdalnego repozytorium wymaga określenia " push where, what source, what destination?"

git push where-to-push source-ref:destination-ref

Przykład z prawdziwego świata, w którym pchasz swoje gałąź główna do gałęzi głównej origin to:

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

Które ze względu na domyślne ścieżki można skrócić do:

git push origin master:master

Tagi działają tak samo:

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

Które można również skrócić do:

git push origin release-1.0:release-1.0

Pomijając źródłowy ref (część przed dwukropkiem), wciskasz " nic " do miejsca docelowego, usuwając ref na odległym końcu.

 3728
Author: Adam Franco,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-30 03:52:52

Prostszym sposobem jest

git push --delete origin YOUR_TAG_NAME

IMO składnia przedrostka dwukropka jest trochę dziwna w tej sytuacji

 259
Author: quexer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-05 10:30:55

Jeśli masz zdalny znacznik v0.1.0 do usunięcia, a Twoim zdalnym jest origin, po prostu:

git push origin :refs/tags/v0.1.0

Jeśli musisz również usunąć tag lokalnie:

git tag -d v0.1.0

Zobacz Adam Franco 's answer for an explanation of Git' s unusual : syntax for deletion.

 141
Author: Alex Dean,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-03 19:03:23

Usuń wszystkie lokalne tagi i uzyskaj listę zdalnych tagów :

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

Usuń wszystkie zdalne Tagi

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

Czyszczenie lokalnych tagów

git tag -l | xargs git tag -d
 76
Author: Siddhartha Mukherjee,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-20 18:29:51

Aby usunąć znacznik ze zdalnego repozytorium:

git push --delete origin TAGNAME

Możesz również usunąć tag lokalnie:

git tag -d TAGNAME
 27
Author: Andrea,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-04 10:30:51

Z terminala, zrób to:

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

Teraz przejdź do Github.com i odświeżają, znikają.

 18
Author: Mahmoud Zalt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-04 17:00:16

Zauważ, że jeśli masz zdalną gałąź o nazwie remote tag, te polecenia są niejednoznaczne:

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

Więc musisz użyć tego polecenia, aby usunąć tag:

git push origin :refs/tags/<tag>

I ten do usunięcia gałęzi:

git push origin :refs/heads/<branch>

Jeśli nie, otrzymasz taki błąd:

error: dst refspec <tagname> matches more than one.
error: failed to push some refs to '<repo>'
 14
Author: Alex Vazquez Fente,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-27 10:37:51

Jeśli utworzyłeś tag o nazwie release01 w repozytorium Git, usuniesz go ze swojego repozytorium wykonując następujące czynności:

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

Aby usunąć jeden z repozytorium Mercurial:

hg tag --remove featurefoo

Proszę o odniesienie https://confluence.atlassian.com/pages/viewpage.action?pageId=282175551

 9
Author: MeganZhou,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-27 10:38:45

Usuń lokalny tag '12345'

git tag -d 12345

Usuń zdalny tag '12345' (np. wersja GitHub też)

git push origin :refs/tags/12345

Alternatywne podejście

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

Tutaj wpisz opis obrazka

 6
Author: Lyes CHIOUKH,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-02 13:12:31

Inne odpowiedzi wskazują, jak to osiągnąć, ale należy pamiętać o konsekwencjach, ponieważ jest to zdalne repozytorium.

Strona podręcznika git tag, w sekcji on Retagging, zawiera dobre wyjaśnienie, jak uprzejmie poinformować innych użytkowników zdalnego repo o zmianie. Dają nawet przydatny szablon ogłoszenia, aby komunikować się, w jaki sposób inni powinni uzyskać twoje zmiany.

 5
Author: Richard Venable,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-04 17:04:01

Do 100x szybsza metoda dla tysięcy zdalnych tagów

Po przeczytaniu tych odpowiedzi, podczas gdy trzeba usunąć ponad 11000 tagów, nauczyłem się tych metod polegania lub xargs trwa zdecydowanie zbyt długo, chyba że masz godziny na spalenie.

Zmagając się, znalazłem dwa znacznie szybsze sposoby. W obu przypadkach zacznij od git tag lub git ls-remote --tags, aby utworzyć listę znaczników, które chcesz usunąć na pilocie. W poniższych przykładach można pominąć lub zastąpić {[7] } dowolnym grep ing, sort ing, tail ing lub headING you want (np. grep -P "my_regex" | sort | head -n -200 itd) :


Ta pierwsza metoda jest zdecydowanie najszybsza, Może 20 do 100 razy szybsza niż używanie xargs i działa z co najmniej kilkoma tysiącami tagów na raz.

git push origin $(< git tag | sorting_processing_etc \
| sed -e 's/^/:/' | paste -sd " ") #note exclude "<" for zsh
Jak to działa? Normalna, oddzielona od linii lista znaczników jest konwertowana do pojedynczej linii znaczników oddzielonych spacjami, z których każdy poprzedzony jest : so . . .
tag1   becomes
tag2   ======>  :tag1 :tag2 :tag3
tag3

Użycie {[15] } z tym znacznikiem formatu wypycha nic do każdego zdalnego ref, kasowanie go( normalny format forsowania w ten sposób to local_ref_path:remote_ref_path).

Metoda druga jest rozwinięta jako oddzielna odpowiedź gdzie indziej na tej samej stronie


Po obu tych metodach prawdopodobnie będziesz chciał usunąć swoje lokalne tagi. Jest to znacznie szybsze, więc możemy wrócić do używania xargs i git tag -d, co jest wystarczające.

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

Lub podobne do zdalnego usuwania:

git tag -d $(< git tag | sorting_processing_etc | paste -sd " ")
 5
Author: TonyH,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-07 21:18:25

Chciałem usunąć wszystkie tagi z wyjątkiem tych, które pasują do wzoru, aby móc usunąć wszystkie oprócz ostatnich kilku miesięcy tagów produkcyjnych, oto co kiedyś było wielkim sukcesem:

Usuń Wszystkie Znaczniki Zdalne I Wyklucz Wyrażenie Z Delete

git tag -l | grep -P '^(?!Production-2017-0[89])' | xargs -n 1 git push --delete origin

Usuń Wszystkie Lokalne Tagi I Wyklucz Wyrażenie Z Delete

git tag -l | grep -P '^(?!Production-2017-0[89])' | xargs git tag -d
 5
Author: Lucent Fox,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-25 23:11:03

Prosty skrypt usuwający dany znacznik zarówno z lokalizacji lokalnej, jak i origin. Z zaznaczeniem, czy znacznik rzeczywiście istnieje.

if [ $(git tag -l "$1") ]; then
    git tag --delete  $1
    git push --delete origin $1

    echo done.
else
    echo tag named "$1" was not found
fi

Jak używać:

  • Utwórz plik skryptu powłoki (np. git-tag-purge.sh) i wklej zawartość.
  • chmod plik skryptu, aby uczynić go wykonywalnym.
  • Udostępnij skrypt globalnie
  • cd do twojego projektu git
  • skrypt wywołania (np.
    $>git-tag-purge.sh tag_name
    )
 4
Author: Dimitar Vlasev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-25 12:07:52

Wydaje się, że dużo pracy dla czegoś {[2] } już robi. Patrząc wstecz przez ten wątek, domyślam się, że powolność z xargs, której doświadczyłeś, wynika z tego, że oryginalna odpowiedź użyła xargs -n 1, gdy naprawdę nie musiała.

Jest to równoważne Twojej metodzie one z tą różnicą, że xargs automatycznie zajmuje się maksymalną długością wiersza poleceń:

git tag | sorting_processing_etc | xargs git push --delete origin

xargs może również uruchamiać procesy równolegle. Metoda 2 z xargs:

git tag | sorting_processing_etc | xargs -P 5 -n 100 git push --delete origin

Powyższe wykorzystuje maksymalnie 5 procesów do obsługuje maksymalnie 100 argumentów w każdym procesie. Możesz eksperymentować z argumentami, aby znaleźć to, co najlepiej odpowiada twoim potrzebom.

 3
Author: HomerM,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-05 15:21:38

Jak zasugerował @CubanX, oddzieliłem tę odpowiedź od oryginału:

Oto metoda, która jest kilka razy szybsza niż {[2] } i może być skalowana znacznie bardziej z tweakingiem. Wykorzystuje on API Github , osobisty token dostępu i wykorzystuje narzędzie parallel.

git tag | sorting_processing_etc | parallel --jobs 2 curl -i -X DELETE \ 
https://api.github.com/repos/My_Account/my_repo/git/refs/tags/{} -H 
\"authorization: token GIT_OAUTH_OR_PERSONAL_KEY_HERE\"  \
-H \"cache-control: no-cache\"`

parallel ma wiele trybów pracy, ale generalnie paralelizuje każde polecenie, które mu podasz, jednocześnie pozwalając na ustawienie limitów liczby procesów. Możesz zmienić parametr --jobs 2 na pozwalają na szybszą pracę, ale miałem problemy z limitami szybkości W Githubie , które obecnie wynoszą 5000/godz., ale wydaje się, że również mają nieudokumentowany limit krótkoterminowy.


Po tym prawdopodobnie będziesz chciał usunąć swoje lokalne tagi. Jest to znacznie szybsze, więc możemy wrócić do używania xargs i git tag -d, co jest wystarczające.

git tag | sorting_processing_etc | xargs -L 1 git tag -d
 3
Author: TonyH,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-07 21:00:46

Jeśli używasz PowerShell i chcesz usunąć kilka z nich:

# Local tags:
git tag -l | foreach { git tag -d $_ }

# Remote tags:
git tag -l | foreach { git push --delete origin $_ }

Oczywiście, można je również filtrować przed usunięciem:

git tag -l | Where-Object { $_ -like "build-*" } | foreach { git tag -d $_ }
 2
Author: rsenna,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-23 11:44:15

Jeśli masz utworzony znacznik zaczynający się od # znak, np. #ST002, może się okazać, że u nie są w stanie usunąć za pomocą normalnych wzorców. tj.

git tag -d #STOO2

Nie usunie znacznika, ale zawiąże go w ciąg znaków w ten sposób

git tag -d "#ST002" or git tag -d '#ST002'

To spowoduje, że zostanie usunięty. Nadzieję, że pomoże to komuś, kto popełnił błąd używając # aby napisać nazwy znaczników.

 2
Author: Royal XL,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-12 16:23:38

Oto lokalny testcase, aby przetestować go lokalnie bez mieszania z pilotem:

~/p $ mkdir gittest    
~/p/git $ cd gittest/
~/p/gittest $ git init
Initialized empty Git repository in /Users/local_user/p/gittest/.git/
 ~/p/gittest $ touch testfile.txt
 ~/p/gittest $ git add testfile.txt
 ~/p/gittest $ git commit -m "initial commit"
[master (root-commit) 912ce0e] initial commit
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 testfile.txt
 ~/p/gittest $ git tag
 ~/p/gittest $ git tag -a testtag
 ~/p/gittest $ git tag
testtag
 ~/p/gittest $ git show-ref
912ce0e40635c90241fdab756dce7ea34938de57 refs/heads/master
b0a6c15cabb990e6d6c46f762891b63608d962f3 refs/tags/testtag
 ~/p/gittest $ cd ..
 ~/p $ mkdir gitbare
 ~/p $ cd gitbare
 ~/p/gitbare $ git init --bare
Initialized empty Git repository in /Users/local_user/p/gitbare/
 ~/p/gitbare $ cd ..
 ~/p $ cd gittest/
 ~/p/gittest $ git remote add origin /Users/local_user/p/gitbare
 ~/p/gittest $ git push -u origin master
Counting objects: 3, done.
Writing objects: 100% (3/3), 215 bytes | 215.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To /Users/local_user/p/gitbare
 * [new branch]      master -> master
Branch 'master' set up to track remote branch 'master' from 'origin'.
 ~/p/gittest $ git push origin testtag
Counting objects: 1, done.
Writing objects: 100% (1/1), 163 bytes | 163.00 KiB/s, done.
Total 1 (delta 0), reused 0 (delta 0)
To /Users/local_user/p/gitbare
 * [new tag]         testtag -> testtag
 ~/p/gittest $ git show-ref
912ce0e40635c90241fdab756dce7ea34938de57 refs/heads/master
912ce0e40635c90241fdab756dce7ea34938de57 refs/remotes/origin/master
b0a6c15cabb990e6d6c46f762891b63608d962f3 refs/tags/testtag
 ~/p/gittest $ git push -d origin testtag
To /Users/local_user/p/gitbare
 - [deleted]         testtag
 ~/p/gittest    git tag -d testtag
Deleted tag 'testtag' (was b0a6c15)
 ~/p/gittest $ git show-ref
912ce0e40635c90241fdab756dce7ea34938de57 refs/heads/master
912ce0e40635c90241fdab756dce7ea34938de57 refs/remotes/origin/master
 ~/p/gittest
 2
Author: Adnan Y,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-03 18:36:00