git uzak etiket ile aynı ada sahip yerel şubeyi it


111

Yeni bir yerel şubeyi product-0.2, aynı ada sahip bir etiketin olduğu uzak bir yere göndermeye çalışıyorum (ancak dalın kendisi mevcut değil)

git push -v --tags --set-upstream origin product-0.2:product-0.2 
Pushing to https://****@github.com/mycompany/product.git
error: src refspec product-0.2 matches more than one.
error: failed to push some refs to 'https://****@github.com/mycompany/product.git'

İle aynı:

git push origin product-0.2:/refs/heads/product-0.2 

Tersi bir yol olsa da, örneğin bir dal oluşturun product-0.1, üzerine kesin ve ardından bir etiket uygulayın product-0.1.

Bazı kişiler, çakışan etiketi yerel olarak kaldırarak, ardından dalı iterek ve ardından uzak etiketi alarak bu sorunu çözer, ancak bu, kullanışsız ve hataya açık görünür.

Şubemi minimum zahmetle nasıl oluşturabilirim?

Girdiniz için teşekkürler


1
Deneyin refs/heads/product-0.2:refs/heads/product-0.2, yani baştaki bölü çizgisi olmadan ve ayrıca yerel tarafta tam refspec verin.
knittl

Git itme orijinli ürün-0.2 deneyebilir: ürün-0.2
vpatil

Yanıtlar:


163

Aşağıdaki komut çalışmalıdır.

git push origin refs/heads/product-0.2:refs/heads/product-0.2 

16
Kabul edilen cevap, belirsizliği gidermenin yolu budur. Yine de, ilk etapta aynı ada sahip etiketlere ve dallara sahip olmamak çok daha kolay. Bazı araçlar (örn. SourceTree) üzerine takılır ve tek çözüm olarak komut satırı ile kendi cihazlarınıza bırakılırsınız. Sağolun beyler!
youri

2
+1. Uzak isimleri netleştirmeniz gerektiğinde benzer bir şey işe yarar:refs/remotes/remote_name/remote_branch
Kelvin

1
Farkında olmadan etiketli bir yayın adını vermişti masterve artık aynı adı taşıyan şubeye aktaramıyordu. git push origin refs/heads/masterhile yaptım (daha sonra bu etiketi sildim, böylece olmasını durdurdum).
tresf

En iyi uygulamaların yanı sıra, zorlamaya çalıştığınız dalı yine de zorlayamazsınız, varsayılan daldır .. Bunu nasıl aşabiliriz?
Baksteen

1
Yukarıdaki çözüm işe yaramazsa, lütfen uzak kafayı çıkardıktan sonra yapın. git push kökenli hakemler / kafa / BRANCHNAME --delete
alones

42

Şubenizle hangi etiketlerin ilişkilendirildiğini doğrulayın:

git tag

Benim durumumda, şube ile aynı adı taşıyan bir etiketim vardı. Silme işe yaradı:

git tag -d [tag-name]

1
İyi çalıştı, şubemle aynı adı taşıyan bir etiketi vardı.
ChanceVI

20

İsimleri değiştirin.

İster yerel ister uzaktan yapın, sadece isimleri değiştirin.

Bir etiket ve dal, git'te temelde aynı şeydir: bir commit için bir göstericiyi temsil ederler. Aradaki fark, bir etiket statik kalırken, siz kaydettikçe dallanma işaretçisinin ilerlemesidir.

Ancak , git checkoutbir dalda veya bir etiket üzerinde bir gerçekleştirebilirsiniz . Neden tüm bu çift isimlerle savaşıyorsunuz? Onları değiştir.


product-0.2.0'Yama seviyesi' için son rakamı olan etiketi çağırmalıydık / çağırmalıydık ama yine de adlandırma kuralımız vardı ve etiketten önce şube oluşturulduğunda geçmişte sorun yaşamadık.
youri

Ekip zaten şubeyi kullanmaya başladıysa, onu yeniden adlandırmak çok zor olmaz mı?
svassr

Henüz göndermediğiniz varlığın adını değiştirin.
TheBuzzSaw

Bundan emin misiniz @TheBuzzSaw? Çünkü yerel olarak her ikisine de aynı isimde, farklı şeyler olarak sahip olabilirim.
John John Pichler

1
Yukarıdaki komut (seçilen cevap olarak) soruyu çözmüş olsa da - git için yeni olduğum için ne soruyu ne de cevabı anladım. BU cevap en azından a) tavsiye ve b) bir açıklama - hatta gelecek için tavsiye verir. Kendi sorumu sormayı düşünürdüm, ancak daha önce sorulduğu gibi yorumlardan yoruldum - imho: anlaşılmaz bir soru başlangıç ​​sorusu ile aynı şey değildir. Ama hayat budur;)
Michael

15

Bir dalla aynı adı taşıyan bir etiketi itmeye çalışıyorsanız :

git push origin tag myTag

3
aferin efendim! bu kabul edilen cevap olmalıdır. her zaman uzun kuyruğu oku SO cevapları
louis_guitton

Bilmekte fayda var ama soruyu hiç cevaplamıyor. Yazar, bunun tam tersi olduğunu, ancak yanıt olarak pek kabul edilemez olduğunu vurgulayarak bir noktaya işaret ettiğinden, olumsuz oy vermeyeceğim.
Peter Halverson

12

Bu sabah standart bir depoya aktarmaya çalışıyordum ve şu hatayı aldım:

$ git push origin master
error: src refspec master matches more than one.
error: failed to push some refs to 'ssh://user@host/srv/git/repo'

Bu, yanlışlıkla yerel olarak bir ana etiket oluşturduğum için oldu:

$ git tag
master
tag1
tag2
tag3
tag4

Bu etiketi yerel olarak sildikten sonra:

git tag -d master

Tekrar itmeyi başardım.


İyi açıklama. Yerel etiketi silmeniz gerekiyor. Teşekkürler!
Chef Pharaoh

5

Bu başarısız oldu:

git push $origin $branch:$branch 

Bu benim için çalışırken:

git checkout $branch
git push $origin HEAD:$branch

1

Kaynak ağacını kullanıyorsanız, aşağıdaki adımları izleyin.

  1. Dalın Etiket adını etiketler bölümünde bulun
  2. Etiket adı silme etiketini tıklayın.
  3. "Uzaktan etiketleri kaldır" ı işaretlediğinizden emin olun ve tamam'ı tıklayın

Değişikliklerinizi zorlamayı tekrar deneyin. şimdi bu işe yarayacak.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.