Normalde zaten 16 cevabı olan bir soruya cevap vermezdim, ancak diğer tüm cevaplar yanlış ve doğru cevap çok basit. Soru, "Uzak eşdeğeri artık mevcut olmayan tüm izleme dallarını silmenin basit bir yolu var mı?"
"Basit", kırılgan değil, tehlikeli değil ve tüm okuyucuların sahip olmayacağı araçlara güvenmeksizin hepsini bir seferde silmek anlamına geliyorsa, doğru cevap: hayır.
Bazı cevaplar basit, ama sorulan şeyi yapmıyorlar. Diğerleri sorulanları yapar, ancak basit değildir: hepsi Git çıktısını metin işleme komutları veya her sistemde bulunmayan komut dosyası dilleri aracılığıyla ayrıştırmaya dayanır. Bunun da ötesinde, önerilerin çoğu çıktısı komut dosyası tarafından ayrıştırılmak üzere tasarlanmamış porselen komutlarını kullanır ("porselen", insanın çalışması için amaçlanan komutları ifade eder; komut dosyaları, alt düzey "tesisat" komutlarını kullanmalıdır).
Daha fazla okuma:
Bunu güvenli bir şekilde yapmak istiyorsanız, sorudaki kullanım durumunda (sunucuda silinmiş ancak yerel şubeler olarak var olan çöp toplama izleme dalları) ve yalnızca yüksek düzey Git komutlarıyla
git fetch --prune
(veya git fetch -p
bu bir takma addır veya git prune remote origin
getirmeden aynı şeyi yapar ve çoğu zaman istediğiniz şey değildir).
- Silindi olarak bildirilen uzak dalları not alın. Veya daha sonra bulmak için
git branch -v
(artık herhangi bir yetim izleme dalı "[gitti]" olarak işaretlenir).
git branch -d [branch_name]
her yetim takip şubesinde
(diğer bazı cevapların önerdiği şey budur).
Bir çözüm yazmak istiyorsanız, o zaman for-each-ref
başlangıç noktanız, burada Mark Longair'in cevabı ve başka bir sorunun cevabı gibi , ancak bir kabuk komut dosyası döngüsü yazmadan veya xargs veya başka bir şey kullanmadan bunu kullanmanın bir yolunu göremiyorum .
Arka plan açıklaması
Neler olduğunu anlamak için, şubeleri izleme durumunda bir şubeniz değil, üç şubeniz olduğunu takdir etmeniz gerekir. (Ve hatırlayın "şube" sadece bir taahhüt bir işaretçi anlamına gelir.)
Bir izleme dalı verildiğinde feature/X
, uzak depoda (sunucu) bu dal bulunacak ve çağrılacaktır feature/X
. Yerel deponuzda remotes/origin/feature/X
"Uzaktan kumandanın bana özelliği / X dalı olduğunu, en son konuştuğumuz şey" dediğimiz bir şube var ve son olarak yerel deponun feature/X
en son taahhüdünüzü gösteren ve "parça" remotes/origin/feature/X
, yani onları hizalamak için çekip itebilirsiniz.
Bir noktada, birisi feature/X
uzaktan kumandadaki sildi . O andan itibaren, yerelinizle kalırsınız feature/X
(muhtemelen daha fazla istemezsiniz, X özelliği üzerindeki çalışmalar muhtemelen bittiğinden) ve remotes/origin/feature/X
kesinlikle işe yaramaz çünkü tek amacı sunucunun şubesinin durumunu hatırlamaktı .
Git yedeklemeyi otomatik olarak temizlemenize izin verir remotes/origin/feature/X
- bu da işe git fetch --prune
yarar - ancak bir nedenden ötürü kendiniz otomatik olarak silmenize izin vermez feature/X
... feature/X
hala yetim izleme bilgilerinizi içermesine rağmen, tamamen birleştirilen eski izleme dallarını belirlemek için. (Sonuçta, verebilir size elle kendiniz tarafından operasyon yapalım bilgileri.)
* master
benim sistemimde. Aşağıdaki komut benim için çalıştı:git branch -d $(git branch --merged |tail -n +2)