Soru Bir git uzak etiketi nasıl silinir?


Daha önce itilmiş olan bir git etiketini nasıl silersiniz?


2136
2018-03-29 23:41


Menşei




Cevaplar:


Uzak etiket adına 'boş' bir referans göndermeniz yeterlidir:

git push origin :tagname

Veya, daha açık bir şekilde, --delete seçenek (veya -d git sürümünüz 1.8.0'dan eskiyse):

git push --delete origin tagname

Yerel etiketi de silmeniz gerekiyorsa, şunu kullanın:

git tag --delete tagname

Arka fon

Bir şubeye, etikete veya başka bir depoya aktarılması, "nereye, hangi kaynağa, hangi hedefe basılsın?" İfadesini içerir.

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

Ana dalınızı kökenin ana dalına yönlendirdiğiniz gerçek dünya örneği şöyledir:

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

Hangi varsayılan yollar nedeniyle, kısaltılabilir:

git push origin master:master

Etiketler aynı şekilde çalışır:

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

Hangi da kısaltılabilir:

git push origin release-1.0:release-1.0

Kaynak ref'yi (kolondan önceki kısım) atlayarak, uzak uçtaki ref dosyasını silmek için hedefe 'hiçbir şey' basmazsınız.


3521
2018-03-29 23:45



Sağ. Ve bu arada, bu da şubeler için çalışıyor. - Joost Diepenmaat
Hem soruyu cevaplayan hem de genel durumu açıklayan ve kısaltılmamış sözdiziminin anlamını açıklayan +1 - Peter Host
Ve birileri birden fazla etiketi bir seferde nasıl sileceklerini merak ettikleri zaman, bunları basitçe beyaz boşluk kullanarak listeleyebilirsiniz. git push --delete origin tag1 tag2. Aynı yerel etiket silme işlemi için de geçerlidir git tag -d tag1 tag2 - dVaffection
Etiket adı bir şube adıyla çarpışırsa, dalınızı silme ile sonuçlanabilir. Ha-ha. İkinci cevabı gör - daha ekolojik - zuba
@dVaffection Keşke yorumunuzu okurdum önce 12 etiketi ayrı ayrı silme ... - BadHorsie


Daha basit bir yol

git push --delete origin YOUR_TAG_NAME

IMO öneki kolon sözdizimi bu durumda biraz garip


246
2017-10-09 00:47



Bunun doğru yol olduğunu düşünüyorum ... diğer sözdizimi bana daha çok saldırı gibi görünüyor. - Luigi R. Viggiano
Evet, bu basit ve işe yarıyor. Yine de, değişken kısmın ne olduğunu belirterek cevabı açıklığa kavuşturalım: git push --delete origin "TAGNAME"Burada TAGNAME orijinal etiketin adıdır. - Teemu Leisti
Bu çalışıyor. Bir ekleme: Bir dalınız ve aynı ada sahip bir etiketiniz varsa, kelimeyi tag etiket adınızı almadan önce etiketi aldığınızdan emin olun, şubeyi değil. - andypaxo
@andypaxo Komutun ne alacağı refspecs, doğru yolu etiketlerle önekliyor refs/tags/, bunun gibi: refs/tags/v2.3.1. - p3lim


Uzak etiketiniz varsa v0.1.0 silmek ve uzaktan originsonra basitçe:

git push origin :refs/tags/v0.1.0

Etiketi yerel olarak da silmeniz gerekiyorsa:

git tag -d v0.1.0

Görmek Adam Francocevabı Git'in olağandışı bir açıklaması için : silme sözdizimi.


134
2017-07-21 16:14



Bu da jgit ile çalışır. : Etiket kısayolu jgit ile çalışmıyor - rynop
Bende var fatal: remote part of refspec is not a valid name in :/refs/tags/0.0.1 ...? - Chaim Eliyah
@ChaimEliyah size bir lider eğik çizgi var, belki bu sizin sorununuz - Joffrey
Daha iyi cevaplar, çünkü bir dalınız ve aynı şekilde adlandırılan bir etiketiniz varsa bu da işe yarar. - Erik A. Brandstadmoen


Tüm yerel etiketleri silin ve uzak etiketlerin listesini alın:

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

Tüm uzak etiketleri kaldır

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

Yerel etiketleri temizle

git tag -l | xargs git tag -d

72
2018-04-02 02:26



Yerel ve uzak depolardan tüm etiketler nasıl kaldırılır. Aradığım şey bu, teşekkürler! - Jorge Orpinel
git getir, uzaktan sil ve yerlileri temizle, güzelce çalıştı! - DiegoRBaquero
Yavaş, ama en basit - Lucent Fox


Etiketi uzak depodan kaldırmak için:

git push --delete origin TAGNAME

Etiketi yerel olarak da silmek isteyebilirsiniz:

git tag -d TAGNAME

26
2017-09-04 10:30





Terminalinizden şunu yapın:

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

Şimdi Github.com'a gidip yenileyin, yok olurlar.


17
2018-06-27 13:23



git etiketi etiket yok - DSF


Uzak etiket olarak adlandırılan uzak bir şubeye sahipseniz, bu komutların belirsiz olduğunu dikkat edin:

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

Bu yüzden etiketi silmek için bu komutu kullanmalısınız:

git push origin :refs/tags/<tag>

ve bu dalı silmek için:

git push origin :refs/heads/<branch>

Değilse, böyle bir hata alırsınız:

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

12
2018-05-05 17:28



Kısa ve özlü. MeganZhou ile birlikte yaptığımız bu yazı, neden sorun yaşadığımızın cevabı olarak ortaya çıktı, şube adı ve tagname aynıydı. Yerel etiketi sildim ve itti: etiket / etiketler ve her şey iyiydi. - rwheadon


Adlı bir etiket oluşturduysanız release01 Git deposunda, aşağıdakileri yaparak deponuzdan kaldırırsınız:

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

Mercurial deposundan birini kaldırmak için:

hg tag --remove featurefoo

Referans lütfen https://confluence.atlassian.com/pages/viewpage.action?pageId=282175551


8
2017-11-11 05:54





Yerel etiketi '12345' sil

git tag -d 12345

'12345' uzak etiketini silin (ör; GitHub sürümü de)

git push origin :refs/tags/12345

Alternatif yaklaşım

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

enter image description here


5
2018-03-23 09:50





Diğer cevaplar bunun nasıl gerçekleştirileceğine işaret eder, ancak bunun uzak bir depo olduğu için sonuçları aklınızda bulundurmalısınız.

Git etiket adam sayfasında Yeniden Etiketlemede bölüm, uzaktaki repo 'nun diğer kullanıcılara nasıl kibarca bilgi vereceğine dair iyi bir açıklamaya sahiptir. Başkalarının değişikliklerinizi nasıl alacağı konusunda iletişim kurmak için kullanışlı bir duyuru şablonu bile veriyorlar.


4
2018-03-04 17:04





Binlerce uzak etiket için 100x'e kadar daha hızlı yöntem

Bu cevapları okuduktan sonra 11.000'den fazla etiketi silmeye ihtiyaç duyduktan sonra, bu yöntemleri güvenerek öğrendim ya da xargs Yakmak için saatleriniz yoksa, çok uzun sürün.

Mücadele, iki tane buldum çok daha hızlı yollar. Her ikisi için ile başlayın git tagveya git ls-remote --tags Uzaktan kumandada silmek istediğiniz etiketlerin bir listesini yapmak için Aşağıdaki örneklerde atlayabilir veya değiştirebilirsiniz sorting_proccessing_etc herhangi biriyle greping, sorting, tailveya headİstediğiniz (Örneğin.  grep -P "my_regex" | sort | head -n -200  vb):


Bu ilk yöntem çok hızlı, belki de 20 ila 100 kez kullanmaktan daha hızlı xargsve en az birkaç ile çalışır bin bir seferde etiketler.

git push origin $(< git tag | sorting_processing_etc \
| sed -e 's/^/:/' | paste -sd " ") #note exclude "<" for zsh

Bu nasıl çalışıyor? Normal, satırlarla ayrılmış etiketler listesi, her biri ile harmanlanmış, tek bir alan ayrılmış etiketler satırına dönüştürülür. : yani . . .

tag1   becomes
tag2   ======>  :tag1 :tag2 :tag3
tag3

kullanma git push bu biçim etiketiyle iter hiçbir şey değil her uzaktan ref içine, onu silme (bu şekilde itmek için normal biçim) local_ref_path:remote_ref_path).

İkinci yöntem ayrı bir cevap olarak ayrıldı aynı sayfada başka bir yerde


Her iki yöntemden sonra, muhtemelen yerel etiketlerinizi de silmek isteyeceksiniz. Bu çok daha hızlıdır, bu yüzden kullanmaya geri dönebiliriz xargs ve git tag -d, bu yeterlidir.

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

VEYA uzaktan silme benzer:

git tag -d $(< git tag | sorting_processing_etc | paste -sd " ")

4
2018-04-15 02:30



Bunu birkaç farklı cevaplara bölmelisin. Tek satırdaki birden fazla etiketle yanıt, şüphesiz toplu etiket silme için doğru yanıttır. Bu bilgiyi neredeyse her yerde bulmak biraz zor. Ne aradığımı bile bilmem, git yardım sayfasından bunu bulmakta zorlanıyorum :) Bu yüzden size teşekkür ediyor ve doğru cevap olarak bunu vurgulayın ve GitHub API'sını bir başka yere taşıyın. Son olarak, yerel olarak, toplu olarak etiketlerin silinmesi, alanla ayrılmış etiketlerle çalışır (sütunlardan kurtulmak) - CubanX
Övgü ve öneriler için teşekkürler. Bunu böleceğim. Yerel etiket silme hakkında yorumunuzu anlamıyorum. Son komut snippet'imin herhangi bir sayıyı kullanabileceğini sanmıyorum, ancak mobilde olduğumu, belki de bir şeyleri kaçırdığını düşünüyorum. - TonyH
Maalesef, yalnızca uzak etiketleri silmek için yaptığınız şeyi, yerel etiketleri silmeyle çalışarak, tüm listeyi bir kerede sağlamanızı istedim. :) Sadece git itme kaynağı: tag1: tag2 vb yerine git tag - tag tag1 tag2 tag3 tag3 toplam yoluna sahip olabilirsiniz. Yine, bir ton teşekkürler! - CubanX