Wie kann ich ein bereits gepushtes Git-Tag löschen?
Wie kann ich ein Remote-Tag löschen?
markdorison
Adam Franco
Sie können eine „leere“ Referenz auf den Remote-Tag-Namen übertragen:
git push origin :tagname
Oder, noch ausdrucksstärker, verwenden Sie die --delete
Möglichkeit (bzw -d
wenn Ihre Git-Version älter als 1.8.0 ist):
git push --delete origin tagname
Beachten Sie, dass git einen Tag-Namensraum und einen Zweig-Namensraum hat, sodass Sie denselben Namen für einen Zweig und für ein Tag verwenden können. Wenn Sie sicherstellen möchten, dass Sie nicht versehentlich den Zweig anstelle des Tags entfernen können, können Sie die vollständige Referenz angeben, wodurch ein Zweig niemals gelöscht wird:
git push origin :refs/tags/tagname
Wenn Sie auch das lokale Tag löschen müssen, verwenden Sie:
git tag --delete tagname
Hintergrund
Das Pushen eines Zweigs, Tags oder einer anderen Referenz an ein entferntes Repository beinhaltet die Angabe „welches Repo, welche Quelle, welches Ziel?“.
git push remote-repo source-ref:destination-ref
Ein reales Beispiel, bei dem Sie Ihren Master-Branch zum Master-Branch des Ursprungs pushen, ist:
git push origin refs/heads/master:refs/heads/master
Was aufgrund von Standardpfaden verkürzt werden kann zu:
git push origin master:master
Tags funktionieren genauso:
git push origin refs/tags/release-1.0:refs/tags/release-1.0
Was auch verkürzt werden kann zu:
git push origin release-1.0:release-1.0
Indem Sie die Quellreferenz (den Teil vor dem Doppelpunkt) weglassen, schieben Sie “nichts” an das Ziel und löschen die Referenz am entfernten Ende.
-
+1 sowohl für die Beantwortung der Frage als auch für die Erläuterung des allgemeinen Falls und die Erläuterung der Bedeutung der ungekürzten Syntax
– Peter Wirt
14. September 2012 um 19:03 Uhr
-
Und für den Fall, dass sich jemand fragt, wie man mehrere Tags gleichzeitig löscht, listen Sie sie einfach mit Leerzeichen auf, z
git push --delete origin tag1 tag2
. Gleiches gilt für das Löschen lokaler Tagsgit tag -d tag1 tag2
– Dmitri
28. Mai 2014 um 0:54 Uhr
-
Wenn der Tag-Name mit einem Zweignamen kollidiert, kann es sein, dass Sie Ihren Zweig löschen. Haha. Siehe die zweite Antwort – es ist ökologischer
– zuba
26. Dezember 2016 um 9:56 Uhr
-
Das ist auch interessant zu wissen
git tag -d `git tag`
löscht alle lokalen Tags. Gleiches gilt fürgit push --delete origin `git tag`
vorausgesetzt, Sie haben die Remote-Tags lokal abgerufen. Das war praktisch in einer Testumgebung.– DarkFranX
31. Juli 2018 um 15:15 Uhr
-
Die Tatsache, dass wir bei über 6700 Upvotes sind und dass es so verdammt kompliziert ist, bedeutet wahrscheinlich, dass es neu gestaltet werden könnte.
– LMS5400
31. August 2021 um 21:31 Uhr
Quexer
Ein einfacherer Weg ist
git push --delete origin YOUR_TAG_NAME
IMO-Syntax mit vorangestelltem Doppelpunkt ist in dieser Situation etwas seltsam
-
Ich denke, das ist der richtige Weg … andere Syntax sieht für mich eher nach Hacks aus.
– Luigi R. Viggiano
24. Dezember 2012 um 17:45 Uhr
-
Das funktioniert. Eine Ergänzung: Wenn Sie einen Zweig und ein Tag mit demselben Namen haben, können Sie das Wort einfügen
tag
vor Ihrem Tag-Namen, um sicherzustellen, dass Sie das Tag und nicht den Zweig erhalten.– andypaxo
27. März 2013 um 20:08 Uhr
-
@andypaxo Was der Befehl braucht, sind refspecs, der richtige Weg wäre, den Tags voranzustellen
refs/tags/
so was:refs/tags/v2.3.1
.– p3lim
13. März 2015 um 5:04 Uhr
-
Ich hatte irgendwie einen “schlechten” Tag-Namen auf dem Remote-Server erstellt, der Sonderzeichen hatte, also kann ich damit nicht synchronisieren, also habe ich das einfach mit deinem Vorschlag entfernt: git push –delete origin “service–
— 151″ , kann es nicht entfernen, nicht mit intellij, nicht mit stash, nicht mit sourceTree. Vielen Dank ! – Dmitri Algazin
12. April 2019 um 14:54 Uhr
-
Für diejenigen, die dies lange nach der Veröffentlichung der Antwort lesen, hatte die (jetzt akzeptierte) Antwort diesen Inhalt zu diesem Zeitpunkt nicht; später wurde der Inhalt dieser Antwort (sehr knapp) vorgeschlagen, in den akzeptierten geändert zu werden. Dies ist einer dieser seltsamen Grenzfälle, in denen Stack Overflows “Die beste Antwort steigt in das oberste System” irgendwie fehlschlägt. Einerseits bin ich froh, dass die akzeptierte Antwort die richtigen Informationen enthält, da die meisten Leser nicht über die oberste Antwort hinausschauen. aber ich bin nicht begeistert, wie wir hierher gekommen sind … Ich hoffe, zukünftige Leser werden nicht denken, dass diese Antwort nur ein Kopieren / Einfügen ist.
– jrh
5. März 2020 um 16:17 Uhr
Alex Dekan
Wenn Sie ein Remote-Tag haben v0.1.0
zu löschen, und Ihre Fernbedienung ist origin
dann einfach:
git push origin :refs/tags/v0.1.0
Wenn Sie das Tag auch lokal löschen müssen:
git tag -d v0.1.0
Sehen Adam Franco‘s Antwort für eine Erklärung von Git’s Ungewöhnlichem :
Syntax zum Löschen.
-
das geht auch mit jgit. Die Kurzschrift :tag funktioniert nicht mit jgit
– Rynop
27. September 2012 um 19:50 Uhr
-
ich habe
fatal: remote part of refspec is not a valid name in :/refs/tags/0.0.1
…?– Chaim Elijah
13. September 2016 um 23:17 Uhr
-
@ChaimEliyah Sie haben einen führenden Schrägstrich, vielleicht ist das Ihr Problem
– Joffrey
31. Oktober 2016 um 22:21 Uhr
-
Bessere Antwort, da dies auch funktioniert, wenn Sie einen Zweig und ein Tag mit demselben Namen haben.
– Erik A. Brandstadmoen
5. Februar 2018 um 8:25 Uhr
-
Gerade
:tagname
sollte für die Fernlöschung funktionieren.– Asklepios
5. Februar 2019 um 21:32 Uhr
Siddhartha Mukherjee
Löschen Sie alle lokalen Tags und rufen Sie die Liste der Remote-Tags ab:
git tag -l | xargs git tag -d
git fetch
Entfernen Sie alle Remote-Tags
git tag -l | xargs -n 1 git push --delete origin
Bereinigen Sie lokale Tags
git tag -l | xargs git tag -d
Mahmoud Zalt
Gehen Sie von Ihrem Terminal aus wie folgt vor:
git fetch
git tag
git tag -d {tag-name}
git push origin :refs/tags/{tag-name}
Gehen Sie jetzt zu Github.com und aktualisieren Sie sie, sie verschwinden.
git tag -d your_tag_name
git push origin :refs/tags/your_tag_name
Die erste Zeile wird gelöscht your_tag_name
aus lokal Repo und Löschungen der zweiten Zeile your_tag_name
aus Fernbedienung Repo.
Für diejenigen, die GitHub verwenden, ist ein weiterer Schritt erforderlich: Entwurf verwerfen.
git push --delete origin $TAGNAME
ist der richtige Ansatz (zusätzlich zu einem lokalen Löschen).
Aber: Stellen Sie sicher, dass Sie Git 2.31+ (Q1 2021) verwenden.
“git push $there --delete
“(Mann) hätte als Fehler diagnostiziert werden sollen, wurde aber stattdessen zu einem passenden Push, der mit Git 2.31 (Q1 2021) korrigiert wurde.
Sehen Commit 20e4164 (23.02.2021) von Junio C Hamano (gitster
).
(Zusammengeführt von Junio C. Hamano — gitster
— in Festschreibung 140045825.02.2021)
push
: nicht abbiegen--delete ''
in einen passenden StoßAufgefallen von: Tilman Vogel
Als wir einen Syntaxzucker hinzugefügt haben “
git push remote --delete
“(Mann)<ref>
zu “git push
“(Mann) als Synonym zum Kanonischengit push remote
(Mann) : Syntax bei f517f1f (“builtin-push
:add
(Mann)--delete
als syntaktischer Zucker für :foo”, 30.12.2009, Git v1.7.0-rc0 — verschmelzen), haben wir nicht sorgfältig genug darauf geachtet<ref>
ist nicht leer.Blind umschreiben“
--delete <ref>
” zu “:<ref>
” bedeutet, dass eine leere Zeichenfolge<ref>
ergibt refspec “:
“, was die Syntax ist, um nach “passendem” Push zu fragen, der nichts löscht.Schlimmer noch, wenn es passende Referenzen gäbe, die vorgespult werden können, wären sie vorzeitig veröffentlicht worden, selbst wenn der Benutzer das Gefühl hat, dass sie noch nicht bereit sind, herausgeschoben zu werden, was eine echte Katastrophe wäre.
-
Es klappt! Verdammt, warum sie diese Option nicht in Veröffentlichungen auf Github setzen. Ich habe ein Update desselben Tags mit älteren Reißverschlüssen durchgeführt. Es dauerte eine Weile, bis ich bemerkte, dass das Datum nicht in Ordnung war. und dann habe ich mehrere Versuche unternommen, bis ich diese Seite gesehen habe.
– Uneconscience UneSource
13. Oktober um 12:28 Uhr