Git, uzak dalı sildiğimde uzak ref olmadığını söylüyor


131

Koştum git branch -a

* master
  remotes/origin/test
  remotes/origin/master

Uzak şubemi silmek istiyorum

denedim

git push origin --delete remotes/origin/test

Bende var

hata: 'uzak / kaynak / test' silinemiyor: uzak referans mevcut değil

Nasıl yok?

Bir yaptım git branch -ave listelendiğini gördüm.

Bir şey mi kaçırdım ?


1
git branch -aşubeleri uzaktan değil, yerelde listeleyecektir. Sağ?

Ben hepsini düşünüyorum. Emin değilim.
cyber8200

2
Bölgenizdeki uzak şubeleri gösterecektir. Tüm uzak dalları listelemeyecektir.

1
@peterh Bana gerçekten "uzaktaki bir dalı neden silemiyorum" diye soruyor gibi görünüyor (muhtemelen dal uzaktan kumandadan silindiğinde ancak uzak referans hala yerel olarak mevcutsa) ve bu nedenle bir kopya değil, ancak daha net bir başlık
Andrew Spencer

1
Başlıkta bir düzenleme yaptım, umarım bu sorunun amacına daha yakın olur
Andrew Spencer

Yanıtlar:


260

Komut git branch -a, yerel deponuzda bulunan uzak dalları gösterir . Bu biraz kafa karıştırıcı gelebilir, ancak bunu anlamak için uzak bir dal ile uzak bir depoda bulunan bir dal arasında bir fark olduğunu anlamalısınız. Uzak dallar , uzak deponun dallarıyla eşleşen yerel dallardır. Bu nedenle, uzak dallar kümesi, uzak deponun durumunu temsil eder.

Uzak dalların listesini güncellemenin genel yolu kullanmaktır git fetch. Bu otomatik olarak uzaktaki dalların güncellenmiş bir listesini alır ve yerel depoda uzak dallar kurarak, eksik olabileceğiniz tüm commit nesnelerini de getirir.

Ancak, varsayılan olarak, git fetchartık uzaktaki şubesi olmayan uzak dalları kaldırmaz. Bunu yapmak için, açıkça gerek budamak uzak dallarının listesi:

git fetch --prune

Bu, uzaktan kumandada artık bulunmayan uzak dallardan otomatik olarak kurtulacaktır. Daha sonra, git branch -rsize uzaktan kumandada gerçekten var olan dalların güncellenmiş bir listesini gösterecektir: Ve bunları kullanarak silebilirsiniz git push.

Bununla birlikte, kullanmak git push --deleteiçin, uzak depodaki şubenin adını belirtmeniz gerekir; uzak şubenizin adı değil. Yani şubeyi test(uzak şubeniz tarafından temsil edilen) silmek için origin/testkullanırsınız git push origin --delete test.


Ayrıca git branch -r | grep "origin"çatal kullanan büyük projelerde yardımcı olacak
Seraf

Bu nedenle, git'ten bu mesajı almanın 2 nedeni vardır: ya şube sunucuda zaten silinmiş ya da dal adının önüne yanlış bir şekilde önek vermişsinizdir remotes/origin/. Ya da her ikisi de.
Andrew Spencer

137

Bunun anlamı , uzak sunucuda remotes/origin/testçağrılan bir şubenizin olmasıdır . Yani komut şöyle olurdutestorigin

git push origin --delete test

25

Başlangıçtaki dalı silmek için bir kısayol var:

git push origin :<branch_name>

Yapmakla aynı şey git push origin --delete <branch_name>


13
  1. uzak şubelerin listesini al
git fetch # synchronize with the server
git branch --remote # list remote branches
  1. uzak dalların bir listesini almalısınız:
origin/HEAD -> origin/master
origin/develop
origin/master
origin/deleteme
  1. şimdi şubeyi silebiliriz:
git push origin --delete deleteme


4

Uzak dalın uzak / kaynak / test olduğu göz önüne alındığında iki yol kullanabilirsiniz:

git push origin --delete test

ve

git branch -D -r origin/test

3

Sonunda küçük bir düzeltmeyle çözümü dürtmekle takip ettim . Adımlarım şu şekildedir
- git fetch --prune;
- git branch -aaşağıdakileri yazdırmak
    master
    branch
    remotes/origin/HEAD -> origin/master
    remotes/origin/master
    remotes/origin/branch(kaldırmak için uzak dal)
- git push origin --delete branch.
Burada, kaldırılacak dal adı remotes/origin/branchdeğil, basitçe verilmiştir branch. Ve dal kaldırılır.


Yorum için +1 re: şube adı, origin/brancholması gerektiği zaman silmeye çalışıyordum branch.
ken

1

git branch -a uzaktan kumandanızdaki şubeleri değil, bölgenizdeki şubeleri listeleyecektir.

Ve hata error: unable to delete 'remotes/origin/test': remote ref does not exist, uzaktan kumandanızda bu adda bir dalınız olmadığı, ancak dalın yerelde mevcut olduğu anlamına gelir.


bu yardımcı olur. silme sorunumu çözdü. "git push --delete test" çalışırken neden "git push --delete test" çalışmıyor merak ediyorum
user10293779

1

Başlangıçtaki 'ana' dışındaki dalları silmek için kullanışlı bir tek satırlık:

git branch --remotes | grep -v 'origin/master' | sed "s/origin\///" | xargs -i{foo} git push origin --delete {foo}

Bunu yapmadan önce bunu çalıştırmanın sonuçlarını anladığınızdan emin olun!


bu kod için teşekkürler! bu, ana dışındaki tüm uzak dalları silmeye çalışırken test ettiğim tek git kodudur.
Alvin

1

Benim için bu çalıştı $ ▶ git şube -D -r kaynak / mybranch

ayrıntılar

$ ▶ git şube -a | grep mybranch uzaktan kumandaları / kökeni / mybranch

$ ▶ git şube -r | grep mybranch kökeni / mybranch

$ ▶ git şube geliştirme * özelliği / dağıtım öncesi

$ ▶ git itme kaynağı - dalımı sil hatası: 'dalım' silinemiyor: uzak başvuru yok hata: 'git@10.102.100.38: config / myrepo.git' adresine bazı referanslar gönderilemedi

$ ▶ git branch -D -r origin / mybranch Uzak şube kaynağı / mybranch silindi (62c7421'di).

$ ▶ git şube -a | grep mybranch

$ ▶ git şube -r | grep mybranch


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.