Kaip pašalinti ištrintą „git“ žymą?

Kaip pašalinti jau pažymėtą „git“ žymą?

1620 m
30 марта '11 в 2:41 2011-03-30 02:41 „Markdorison“ yra nustatytas kovo 30 d ., 11 val
@ 15 atsakymų

Tiesiog reikia spustelėti „tuščią“ nuorodą į panaikinto žyma pavadinimą:

 git push origin :tagname 

Arba, aiškiau, naudokite parametrą --delete (arba -d jei jūsų git versija yra senesnė nei 1.8.0):

 git push --delete origin tagname 

Jei taip pat turite ištrinti vietinę žymą, naudokite:

 git tag --delete tagname 

Fonas

Paspaudus filialą, žymę ar kitą ref nuorodą į nuotolinį saugyklą, yra nuoroda „spustelėkite, kur, kokį šaltinį, kokią paskirties vietą?“.

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

Realaus pasaulio pavyzdys, kuriame spustelėjote pagrindinį pagrindinio filialo filialą:

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

Kuris dėl numatytojo kelio galima sutrumpinti iki:

 git push origin master:master 

Žymos veikia taip pat:

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

Kas taip pat gali būti sumažintas iki:

 git push origin release-1.0:release-1.0 

Išjungę pradinį ref numerį (dalį prieš dvitaškį), paskirties vietoje spustelėsite „nieko“, pašalindami atstumą gale.

2627
30 марта '11 в 2:45 2011-03-30 02:45 atsakymą davė Adamas Franco kovo 30 d. 11 d. 2:45 val. 2011-03-30 02:45

Lengviau -

 git push --delete origin YOUR_TAG_NAME 

IMO demono sintaksė šioje situacijoje yra šiek tiek keista.

198
09 окт. atsakymas pateikiamas quexer 09 oct. 2012-10-09 03:47 '12 at 3:47 2012-10-09 03:47

Jei turite nuotolinę žymę v0.1.0 kad pašalintumėte, ir nuotolinę origin , tiesiog:

 git push origin :refs/tags/v0.1.0 

Jei taip pat reikia vietoje pašalinti žymą:

 git tag -d v0.1.0 

Žr. Adam Franco atsakymą dėl „Git“ neįprastos sintaksės paaiškinimo : ištrinti.

97
21 июля '12 в 19:14 2012-07-21 19:14 atsakymą pateikė Alex Dean, liepos 21 d., 12 val., 19:14 val., 2012-07-21 19:14

Ištrinkite visus vietinius žymenis ir gaukite ištrintų žymų sąrašą :

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

Ištrinti visas ištrintas žymes

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

Išvalykite vietines žymes

 git tag -l | xargs git tag -d 
56
02 апр. Atsakymą pateikė Siddhartha Mukherjee 02 Bal. 2013-04-02 05:26 '13, 5:26 val. 2013-04-02 05:26

Žymos pašalinimas iš nuotolinio saugyklos:

 git push --delete origin TAGNAME 

Taip pat galite ištrinti žymę vietoje:

 git tag -d TAGNAME 
20
04 сент. Atsakymą pateikė Andrea 04 sep. 2014-09-04 13:30 '14, 13:30, 2014-09-04 13:30

Iš savo terminalo atlikite šiuos veiksmus:

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

Dabar eikite į „Github.com“ ir atnaujinkite, jie išnyks.

13
27 июня '16 в 16:23 2016-06-27 16:23 atsakymą pateikė Mahmoudas Zaltas birželio 27 d. 16:23 2016-06-27 16:23

Atminkite, kad jei turite nuotolinį filialą, vadinamą nuotoliniu žyma, šios komandos yra dviprasmiškos:

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

Todėl turėtumėte naudoti šią komandą, kad pašalintumėte žymą:

 git push origin :refs/tags/<tag> 

ir tai vienas filialo ištrynimas:

 git push origin :refs/heads/<branch> 

Jei ne, gausite klaidos pranešimą:

 error: dst refspec <tagname> matches more than one. error: failed to push some refs to '<repo>' 
10
05 мая '16 в 20:28 2016-05-05 20:28 Atsakymą pateikė Alex Vazquez Fente gegužės 05, 16, 20:28 2016-05-05 20:28

Jei „Git“ saugykloje sukūrėte žymę, vadinamą „ release01 “, turite pašalinti ją iš savo saugyklos atlikdami šiuos veiksmus:

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

Jei norite pašalinti jį iš „Mercurial“ saugyklos:

 hg tag --remove featurefoo 

Nurodykite https://confluence.atlassian.com/pages/viewpage.action?pageId=282175551

6
11 нояб. Atsakymą pateikė MeganZhou 11 lapkričio. 2014-11-11 08:54 '14 at 8:54 am 2014-11-11 08:54

Kiti atsakymai nurodo, kaip tai padaryti, tačiau turėtumėte atsižvelgti į tai, kad tai yra nuotolinė saugykla.

Skiltyje „ On Retagging“ pateiktame „git tag“ puslapyje pateikiamas geras paaiškinimas, kaip maloniai informuoti kitų naudotojų nuotolinius pakeitimus. Jie netgi suteikia patogų skelbimo šabloną kitiems, kaip pranešti, kaip gauti pakeitimus.

4
04 марта '13 в 20:04 2013-03-04 20:04 atsakymą pateikė Richard Venable kovo 14 d. 13 d. 20:04 2013-03-04 20:04

Paprastas scenarijus, skirtas pašalinti šią žymę iš vietinių ir originalių vietų. Patikrindami, ar žyma tikrai egzistuoja.

 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 

Kaip naudoti:

  • Sukurkite scenarijų rinkmenos failą (pvz., Git -tag-purge.sh) ir įklijuokite turinį.
  • chmod savo scenarijų failą, kad jis būtų vykdomas.
  • Padaryti scenarijų prieinamą
  • cd projektui
  • Skripto skambutis (pvz.,
      $> git-tag-purge.sh žymos_pavadinimas 
    )
2
25 апр. Atsakymą pateikė Dimitar Vlasev 25 Bal 2017-04-25 15:07 '17, 15:07, 2017-04-25 15:07

Atrodo, kad daugelis darbų kažkam jau daro. Žvelgiant atgal į šią temą, manau, kad lėtumas su xargs , kurį patyrėte, yra tas, kad originalus atsakymas buvo naudojamas xargs -n 1 kai jis tikrai nereikalingas.

Tai atitinka jūsų metodą, išskyrus tai, kad xargs automatiškai tvarko didžiausią komandinės eilutės ilgį:

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

xargs taip pat gali pradėti procesus lygiagrečiai. 2 metodas su xargs :

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

Pirmiau pateiktame pavyzdyje daugiausia 5 procesai naudojami ne daugiau kaip 100 argumentų apdorojimui kiekviename procese. Jūs galite eksperimentuoti su argumentais, kad surastumėte tą, kuris geriausiai atitinka jūsų poreikius.

1
05 июня '17 в 18:21 2017-06-05 18:21 atsakymą įteikė HomerM birželio 05, 17, 18:21 2017-06-05 18:21

Metodas iki 100 kartų greičiau tūkstančiams ištrintų žymų

Perskaitę šiuos atsakymus, kai reikia pašalinti daugiau nei 11 000 žymų, sužinojau, kad šie metodai priklauso nuo to, ar xargs užtrunka per ilgai, jei neturite valandų rašyti.

Kova, aš rasiu du daug greičiau. Jei norite sukurti žymų, kuriuos norite pašalinti ant nuotolinio valdymo pulto, sąrašą, pradėkite su „ git tag arba „ git ls-remote --tags . Toliau pateiktuose pavyzdžiuose galite praleisti arba pakeisti sorting_proccessing_etc bet kokiu sorting_proccessing_etc , tail ing arba head kurį norite (pvz., grep -P "my_regex" | sort | head -n -200 , ir tt):


Šis pirmasis metodas, žinoma, yra greičiausias, galbūt 20–100 kartų greitesnis nei naudojant xargs , ir vienu metu dirba su bent keliais tūkstančiais žymų.

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

ARBA analogiškas nuotolinio pašalinimo:

 git tag -d $(< git tag | sorting_processing_etc | paste -sd " ") 
1
15 апр. TonyH atsakymą pateikė balandžio 15 d 2017-04-15 05:30 '17, 5:30, 15-15 val

Norėjau pašalinti visas žymes, išskyrus tas, kurios atitinka šabloną, kad galėčiau pašalinti viską, išskyrus paskutinius du mėnesius, kai sukūrėte žymes, tai aš naudoju labai sėkmingai:

Ištrinkite visas ištrintas žymes ir ištrinkite ištrynimą ištrinti.

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

Ištrinkite visas vietines žymes ir pašalinkite išraišką ištrinti.

 git tag -l | grep -P '^(?!Production-2017-0[89])' | xargs git tag -d 
0
26 сент. atsakymą pateikė „ Lucent Fox “ 26 sep. 2017-09-26 02:11 '17 at 2:11 am 2017-09-26 02:11

Jei naudojate „PowerShell“ ir norite juos pašalinti iš jų:

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

Žinoma, prieš juos ištrindami galite juos filtruoti:

 git tag -l | Where-Object { $_ -like "build-*" } | foreach { git tag -d $_ } 
0
23 авг. atsakymą pateikė rsenna 23 rug . 2017-08-23 14:44 '17, 14:44 pm 2017-08-23 14:44

Kaip siūlė @CubanX, šį atsakymą bendrinau su originalu:

Čia yra metodas, kuris yra kelis kartus greitesnis nei xargs , ir gali pritaikyti daug daugiau. Jis naudoja „Github“ API , prieigos raktą ir naudoja parallel įrankį.

parallel yra daug veikimo režimų, bet paprastai lygiaverčiai bet kuriai komandai, kurią duodate, leisdami nustatyti procesų skaičiaus ribas, galite pakeisti parametrą --jobs 2 kad būtų užtikrintas greitesnis darbas, bet turėjau problemų su „Github“ greičio apribojimais , kurie šiuo metu yra 5000 ar mažiau valandų, bet taip pat atrodo, kad ji turi nedokumentuotą trumpalaikę ribą. 


Po to tikriausiai taip pat norite ištrinti vietines žymes. Tai daug greičiau, todėl galime grįžti prie xargs ir git tag -d , kuris yra pakankamas.

Kiti klausimai apie žymes arba klausimo pateikimas