Hoe een externe tag verwijderen?

Hoe verwijdert u een git-tag die al is ingedrukt?


1, Autoriteit 100%

U kunt een ‘lege’ verwijzing naar de naam van de externe tag duwen:

git push origin :tagname

of, meer expliciet, gebruik de --deleteOptie (of -dals uw GIT-versie ouder is dan 1.8.0):

git push --delete origin TAGNAME

Merk op dat Git Namespace en Branch-naamruimte heeft, zodat u dezelfde naam voor een tak en voor een tag kunt gebruiken. Als u ervoor wilt zorgen dat u het filiaal per ongeluk niet kunt verwijderen in plaats van de tag, kunt u volledige ref opgeven die nooit een filiaal zal verwijderen:

git push origin :refs/tags/tagname

Als u ook de lokale tag wilt verwijderen, gebruikt u:

git tag --delete tagname

Achtergrond

Duwen van een filiaal, tag of andere REF naar een externe repository omvat het specificeren van “welke repo, welke bron, welke bestemming?”

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

Een echt wereld voorbeeld waarbij je je hoofdtak naar de mastertak van de herkomst duwt is:

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

die vanwege standaardpaden kunnen worden ingekort naar:

git push origin master:master

Tags werken op dezelfde manier:

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

die ook kan worden ingekort naar:

git push origin release-1.0:release-1.0

Door het weglaten van de bron Ref (het deel vóór de dikke darm), duwt u ‘niets’ naar de bestemming, waarbij u de ref op het externe uiteinde wilt verwijderen.


2, Autoriteit 7%

Een eenvoudiger manier is

git push --delete origin YOUR_TAG_NAME

IMO voorvoegsel dubbele punt syntaxis is een beetje vreemd in deze situatie


Antwoord 3, autoriteit 4%

Als u een afstandsbedieningstag v0.1.0wilt verwijderen en uw afstandsbediening is origin, doe dan gewoon:

git push origin :refs/tags/v0.1.0

Als u de tag ook lokaal moet verwijderen:

git tag -d v0.1.0

Zie Adam Franco‘s antwoordvoor een uitleg van Git’s ongebruikelijke :syntaxis voor verwijdering.


Antwoord 4, autoriteit 2%

Verwijder alle lokale tags en krijg de lijst met externe tags:

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

Verwijder alle externe tags

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

Lokale tags opschonen

git tag -l | xargs git tag -d

Antwoord 5

Om de tag uit de externe repository te verwijderen:

git push --delete origin TAGNAME

Misschien wilt u de tag ook lokaal verwijderen:

git tag -d TAGNAME

Antwoord 6

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

De eerste regel verwijdert your_tag_nameuit de lokalerepo en de tweede regel verwijdert your_tag_nameuit de externerepo.

Voor degenen die GitHub gebruiken, is nog een stap nodig: concept weggooien.


Antwoord 7

Doe dit vanaf uw terminal:

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

Ga nu naar Github.com en ververs, ze verdwijnen.


Antwoord 8

Lokale tag ‘12345’ verwijderen

git tag -d 12345

Verwijder externe tag ‘12345’ (bijv. ook GitHub-versie)

git push origin :refs/tags/12345

alternatieve aanpak

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


Antwoord 9

Merk op dat, als je een remote branch hebt genoemd als een remote tag, deze commando’s dubbelzinnig zijn:

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

Dus je moet dit commando gebruiken om de tag te verwijderen:

git push origin :refs/tags/<tag>

en deze om de tak te verwijderen:

git push origin :refs/heads/<branch>

Als dat niet het geval is, krijgt u een foutmelding als deze:

error: dst refspec <tagname> matches more than one.
error: failed to push some refs to '<repo>'

Antwoord 10

Als je SourceTree gebruikt – een geweldige Git GUI – dan kun je dit gemakkelijk doen zonder de opdrachtregel door het volgende te doen:

  1. Open je repository in SourceTree
  2. Selecteer en vouw het tabblad ‘Tags’ aan de linkerkant uit
  3. Klik met de rechtermuisknop op de tag die u wilt verwijderen
  4. Selecteer ‘UW_TAG_NAME verwijderen’
  5. Selecteer in het verificatievenster “Tag verwijderen van afstandsbedieningen”

YOUR_TAG_NAME wordt nu verwijderd uit je lokale repository en alle afstandsbedieningen – of het nu GitHub, BitBucket of waar dan ook je hebt vermeld als afstandsbediening voor die repository.

Als je een tag lokaal hebt verwijderd, maar niet op de externe oorsprong, en je wilt deze overal verwijderen, maak dan gewoon een nieuwe tag met dezelfde naam en aan dezelfde commit als de oorsprong. Herhaal vervolgens de bovenstaande stappen om overal te verwijderen.


Antwoord 11

Als je een tag met de naam release01in een Git-repository hebt gemaakt, zou je deze als volgt uit je repository kunnen verwijderen:

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

Om er een uit een Mercurial-repository te verwijderen:

hg tag --remove featurefoo

Raadpleeg https://confluence.atlassian.com/pages/viewpage. actie?pageId=282175551


Antwoord 12

Ik wilde alle tags verwijderen, behalve de tags die overeenkomen met een patroon, zodat ik alle productietags behalve de laatste paar maanden kon verwijderen, dit is wat ik met veel succes gebruikte:

Alle externe tags verwijderen & Expressie uitsluiten van verwijderen

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

Verwijder alle lokale tags & Expressie uitsluiten van verwijderen

git tag -l | grep -P '^(?!Production-2017-0[89])' | xargs git tag -d

Antwoord 13

Als u PowerShell gebruikt en u wilt er een aantal verwijderen:

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

Je kunt ze natuurlijk ook filteren voordat je ze verwijdert:

git tag -l | Where-Object { $_ -like "build-*" } | foreach { git tag -d $_ }

14

De andere antwoorden wijzen op hoe u dit bereikt, maar u moet rekening houden met de gevolgen, omdat dit een externe repository is.

De Git Tag Man-pagina, in de Bij Retagging sectie, heeft een goede uitleg over hoe u de andere gebruikers van de wijziging van de wijziging van de wijziging van de Remote Repo kunt informeren. Ze geven zelfs een handige aankondigingssjabloon om te communiceren hoe anderen uw wijzigingen moeten krijgen.


15

Eenvoudig script om gegeven tag van zowel lokale als herkomstlocaties te verwijderen.
Met een cheque of tag echt bestaat.

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

Hoe te gebruiken:

  • Maak Shell Script-bestand (bijvoorbeeld Git-tag-Purge.SH) en plak inhoud.
  • chmod uw scriptbestand om het uitvoerbaar bestand te maken.
  • Maak het script wereldwijd beschikbaar
  • CD naar uw GIT-project
  • Oproep-script (b.v.
    $ & GT; GIT-TAG-PURGE.SH TAG_NAME 

    )


16

Het lijkt erop veel werk voor iets xargsreeds. Terugkijkend door deze draad, vermoed ik de traagheid met xargsdie u hebt ervaren, is omdat het oorspronkelijke antwoord gebruikte xargs -n 1wanneer het niet echt nodig heeft.

Dit komt overeen met uw methode één, behalve dat xargsautomatisch handelt met de maximale opdrachtregellengte:

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

xargsKan ook processen parallel uitvoeren. Methode 2 met xargs:

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

Het bovenstaande maakt gebruik van maximaal 5 processen om maximaal 100 argumenten in elk proces te verwerken. U kunt experimenteren met de argumenten om te vinden wat het beste werkt voor uw behoeften.


17

Als u een tag hebt die is gemaakt met de # teken, b.v. #ST002, u kunt merken dat u niet kunt verwijderen met behulp van normale patronen. d.w.z.

git tag -d #STOO2

Wist de tag niet, maar wikkelt het in een string literal zoals de

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

Dat krijgt het verwijderd. In de hoop dat het iemand zal helpen die de fout heeft gemaakt om # te gebruiken om tagnamen te schrijven.


18

Voor Tortoise Git-gebruikers, op een schaal van honderden tags, kunt u meerdere tags tegelijk verwijderen met behulp van UI, maar de UI is goed verborgen in contextmenu.

Klik in het verkennervenster met de rechtermuisknop -> Bladeren door referenties -> Klik met de rechtermuisknop op ref/refmotes/name -> kies ‘Externe tags verwijderen’

Zie https://tortoisegit.org/docs/tortoisegit/ tgit-dug-browse-ref.html


Antwoord 19

git push --delete origin $TAGNAMEis de juiste aanpak (naast een lokale verwijdering).

Maar: zorg ervoor dat je Git 2.31 gebruikt.

git push $there --delete(man)had als een fout moeten worden gediagnosticeerd, maar in plaats daarvan omgezet in een overeenkomende push, die is gecorrigeerd met Git 2.31 (Q1 2021).

Zie commit 20e4164(23 februari 2021) door Junio C Hamano (gitster).
(Samengevoegd door Junio C Hamano — gitsterin commit 1400458, 25 februari 2021)

push: niet draaien –delete ” in een bijpassende duw

Opgemerkt door: Tilman Vogel

Toen we een syntaxissuiker “git push remote --delete(man)<ref>naar “git push(man)als synoniem voor de canonieke git push remote(man): syntaxis op f517f1f(“builtin-push: add(man)--deleteals syntactische suiker voor :foo”, 30-12-2009, Git v1 .7.0-rc0 — samenvoegen), we waren niet voorzichtig genoeg om ervoor te zorgen dat <ref>niet leeg is.

Blind “–delete ” herschrijven naar “:” betekent dat een lege string <ref>resulteert in refspec “:”, wat de syntaxis is om te vragen om “overeenkomstige” push die dat wel doet niets verwijderen.

Erger nog, als er matchende ref-gegevens waren die snel doorgestuurd kunnen worden, zouden ze voortijdig zijn gepubliceerd, zelfs als de gebruiker denkt dat ze nog niet klaar zijn om naar buiten te worden geduwd, wat een echte ramp zou zijn.


20

Hier is een lokale testcase om het lokaal te testen zonder met een afstandsbediening te rommelen:

~/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

Antwoord 21

Ik wilde alleen een alias delen die ik heb gemaakt en die hetzelfde doet:

Voeg het volgende toe aan uw ~/.gitconfig

[alias]
    delete-tag = "!f() { \
            echo 'deleting tag' $1 'from remote/origin ausing command: git push --delete origin tagName;'; \
            git push --delete origin $1; \
            echo 'deleting tag' $1 'from local using command: git tag -d tagName;'; \
            git tag -d $1; \
        }; f"

Het gebruik ziet er als volgt uit:

-->git delete-tag v1.0-DeleteMe
deleting tag v1.0-DeleteMe from remote/origin ausing command: git push --delete origin tagName;
To https://github.com/jsticha/pafs
 - [deleted]             v1.0-DeleteMe
deleting tag v1.0-DeleteMe from local using command: git tag -d tagName;
Deleted tag 'v1.0-DeleteMe' (was 300d3ef22)

Antwoord 22

Om een tag uit uw externe repository te verwijderen, kunt u

git push <remote> :refs/tags/<tagname>

De manier om het bovenstaande te interpreteren is door het te lezen als de null-waarde, de waarde vóór de dubbele punt wordt naar de tagnaam op afstand gepusht.

Other episodes