Git 1.7+ içindeki tüm uzak dalları nasıl listeleyebilirim?


634

Denedim git branch -r, ancak bu yalnızca yerel olarak izlediğim uzak dalları listeliyor. Sahip olmadığımların listesini nasıl bulabilirim? (Komutun tüm uzak dalları mı yoksa yalnızca izlenmemiş olanları mı listelediği önemli değil .)


11
Sen böylece, varsayılan refspec modifiye ettik demek git fetchve git remote updatetüm uzaktan kumandanın dalları getirilemedi mı? Aksi takdirde sadece getirip kullanabilirsiniz git branch -r...
Cascabel

2
Sahip olmalıyım. git branch -ryalnızca yerel olarak izlediğim uzak şubeleri gösteriyordu. Şimdi daha iyi çalışıyor.
James A. Rosen

Yanıtlar:


804

Buradaki ziyaretçilerin büyük çoğunluğu [1] için "Git 1.7+ içindeki tüm uzak dalları nasıl listeleyebilirim?" Sorusuna doğru ve en basit cevap. dır-dir:

git branch -r

Küçük bir azınlık için [1] git branch -r çalışmaz. Eğer git branch -rdeğil iş deneyin yapar:

git ls-remote --heads <remote-name>

Eğer git branch -rdeğil işi yapar sonra belki olarak Cascabel diyor "oluyor da o, varsayılan refspec modifiye ettik git fetchve git remote updatetüm getirmediğini belirtir remote'ın şubeleri" .


[1] Bu dipnot 2018-Şubat'ın yazımı itibariyle, yorumlara baktım git branch -rve büyük çoğunluk için çalışmaların ( 140'ın yaklaşık% 90'ı veya 125'i ) olduğunu gördüm .

Çalışmazsa git branch -r, bu cevaba göre kontrol git config --get remote.origin.fetchjoker karakter ( *) içerir


15
Ayrıca git ls-remote [url]bunu ilk önce klonlamak zorunda
kalmazsınız

142
Bu cevap doğru ama yanıltıcı, kullanıcıların arama motorlarından buraya gelmesi gereken ilk şey şudur: git branch -rBu doğru ve en basit cevap olduğundan, askerin git branch -rburaya gelen çoğu kullanıcının davranışını değiştirdiği özel bir durumu vardı var
Stephan

24
@Stephan: Bundan emin misin? git branch -rbenim için de çalışmadı. Sadece yerel olarak izlenen şubeleri listeliyor. Ancak git ls-remote --headsuzak depodaki tüm dalları listeledi ...
rexford

2
Kişi, üzerinden listelenen git ls-remote(ve listelenmeyen git branch -r) dallardan getirilmek istiyorsa , git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"getirmeden önce stackoverflow.com/a/26649770/873282 adresinde açıklandığı gibi yürütülmelidir .
koppor

11
git fetch --allMevcut tüm uzak dalları almak için daha önce yapmayı unutmayın .
A. Attia

173

remote show yerel olarak izlenmeyenler ve henüz getirilmemiş olanlar da dahil olmak üzere uzaktan kumandadaki tüm dalları gösterir.

git remote show <remote-name>

Ayrıca, yerel deponuza göre dalların durumunu göstermeye çalışır:

> git remote show origin
* remote origin
  Fetch URL: C:/git/.\remote_repo.git
  Push  URL: C:/git/.\remote_repo.git
  HEAD branch: master
  Remote branches:
    branch_that_is_not_even_fetched new (next fetch will store in remotes/origin)
    branch_that_is_not_tracked      tracked
    branch_that_is_tracked          tracked
    master                          tracked
  Local branches configured for 'git pull':
    branch_that_is_tracked merges with remote branch_that_is_tracked
    master                 merges with remote master
  Local refs configured for 'git push':
    branch_that_is_tracked pushes to branch_that_is_tracked (fast-forwardable)
    master                 pushes to master                 (up to date)

Kesinlikle. Getirilmedi, yerel olarak izlenmedi.
Thufir

3
branch_that_is_not_tracked tracked?
Piotr Dobrogost

3
@PiotrDobrogost Evet! branch_that_is_not_trackedherhangi bir yerel git dalı tarafından izlenmeyen bir daldır. Ancak, yerel depoya getirildi (bu nedenle uzak bir şube var). Uzaktan kumandayı izleyen yerel bir şube olmamasına rağmen, garip bir nedenden dolayı git remote showbu durumu çağırır tracked. Bu durumda, karşıt trackedIS new, "indirilmeyip" anlamına gelir.
Klas Mellbourn

Bu programlı çalışmıyor, ayrıştırmak çok zor
Alexander Mills

Bu, daha sonra uzaktan kumandayla kaldırılmış olan uzak bir dalı yerel olarak çektiğim özel bir durumu yakaladı. Sonra git branch -rhala uzak bir dal git remote show originolduğunu gösterir , ancak bunu gösterir refs/remotes/origin/my-now-dead-branch stale (use 'git remote prune' to remove). Çok daha kullanışlı!
icc97

53
git branch -a | grep remotes/*

10
Bu temelde git branch -rOP'nin yeterince iyi olmadığını söyledi.
Cascabel

9
aslında her iki git branch -ave git branch -rbenim için tüm uzaktan dalları listelemek, emin neyi OP sözü doğruysa değilim. Sadece bir test deposu oluşturdum ve bunu doğruladım (sadece master izleme kaynağı / master vardı ama yine de her iki bayraklı tüm uzak dalları gördüm).
Idan K

2
varolan bir çekilen repo klon ve sonra git sunucuda kökeni el ile işaretlerseniz bu tüm uzak dalları listelemiyor gibi görünüyor. Kabul edilen cevap bu durumu ele almaktadır.
nielsbot

Bu çözüm, en son getirildiğimden beri oluşturulan uzak dalları listelemiyor gibi görünüyor.
Anubian Noob

Garip olan: Ben kullanılan ettik Yıllardır git fetchtakip git branch -aancak son zamanlarda başladığı benim için başarısız. Belki git davranışı değişti?
Sebastian Mach

39

Kullanarak git branch -rtüm uzak dalları git branch -alisteler ve yerel ve uzaktaki tüm dalları listeler. Bu listeler modası geçmiş. Bu listeleri güncel tutmak için çalıştırın

git remote update --prune

yerel şube listenizi uzaktan kumandadaki tüm yenileriyle güncelleyecek ve artık orada olmayanları kaldıracaktır. Bu güncelleme komutunu --prune olmadan çalıştırmak yeni dalları alır, ancak artık uzaktan kumandada olmayanları silmez.

Uzaktan kumandayı belirterek bu güncellemeyi hızlandırabilirsiniz, aksi takdirde eklediğiniz tüm uzaktan kumandalardan güncellemeler alacaktır.

git remote update --prune origin

Bu benim sorunumu çözdü - 'git branch -r' artık benim için çalışıyor.
Francis Norton

27

Fakat

git branch -ar

yapmalı.


41
Her iki argümanın da iletilmesi gereksizdir. yalnızca uzak dalları -rdöndürür . hem yerel döndürür ve uzak dalları. Böylece ve her ikisi de aynı çıktıyı verir. -agit branch -agit branch -ar
Walter Roman

19

Bunu ayrıca git fetcha git branch -r. Getirmeden en güncel dalları göremezsiniz.


git fetch --alltüm şubelere sahip olmak
A. Attia



9

TP; TR;

Sorununuzun çözümü budur:

git remote update --prune    # To update all remotes
git branch -r                # To display remote branches

veya:

git remote update --prune    # To update all remotes
git branch <TAB>             # To display all branches

5

Çalıştırılacak en iyi komut git remote show [remote]. Bu, uzak ve yerel, izlenen ve izlenmeyen tüm dalları gösterecektir.

İşte açık kaynaklı bir projeden bir örnek:

> git remote show origin
* remote origin
  Fetch URL: https://github.com/OneBusAway/onebusaway-android
  Push  URL: https://github.com/OneBusAway/onebusaway-android
  HEAD branch: master
  Remote branches:
    amazon-rc2                   new (next fetch will store in remotes/origin)
    amazon-rc3                   new (next fetch will store in remotes/origin)
    arrivalStyleBDefault         new (next fetch will store in remotes/origin)
    develop                      tracked
    master                       tracked
    refs/remotes/origin/branding stale (use 'git remote prune' to remove)
  Local branches configured for 'git pull':
    develop merges with remote develop
    master  merges with remote master
  Local refs configured for 'git push':
    develop pushes to develop (local out of date)
    master  pushes to master  (up to date)

Sadece uzak dalları almak istiyorsak kullanabiliriz grep. Kullanmak istediğimiz komut şöyledir:

grep "\w*\s*(new|tracked)" -E

Bu komutla:

> git remote show origin | grep "\w*\s*(new|tracked)" -E
    amazon-rc2                   new (next fetch will store in remotes/origin)
    amazon-rc3                   new (next fetch will store in remotes/origin)
    arrivalStyleBDefault         new (next fetch will store in remotes/origin)
    develop                      tracked
    master                       tracked

Bunun için bir takma ad da oluşturabilirsiniz:

git config --global alias.branches "!git remote show origin | grep \w*\s*(new|tracked) -E"

Sonra sadece koşabilirsiniz git branches.




4

Sadece bir git fetchkomut çalıştırın . Tüm uzak dalları yerel veri havuzunuza çekecek ve sonra git branch -atüm dalları listelemek için bir yapılacaktır .


1

Listelenmesi gerektiğini bildiğiniz uzak bir dal varsa, ancak listelenmiyorsa, kaynağınızın bununla doğru şekilde ayarlandığını doğrulamak isteyebilirsiniz:

git remote show origin

Her şey yolundaysa, belki bir güncelleme çalıştırmalısınız:

git remote update

Başarılı bir şekilde çalıştığını varsayarsak, diğer cevapların söylediklerini yapabilmelisiniz:

git branch -r

1

Bu komutu kullanarak,

git log -r --oneline --no-merges --simplify-by-decoration --pretty=format:"%n %Cred CommitID %Creset: %h %n %Cred Remote Branch %Creset :%d %n %Cred Commit Message %Creset: %s %n"

CommitID       : 27385d919
Remote Branch  : (origin/ALPHA)
Commit Message :  New branch created

Uzak şubeler tarafından başvurulan kesinleştirme iletileri ve kesinleştirme kimlikleri dahil tüm uzak dalları listeler.


1

Kullanmak istiyorum:

git branch -av

Bu komut yalnızca uzak dallar da dahil olmak üzere tüm dalların listesini göstermekle /remotekalmaz, aynı zamanda *neyi güncellediğiniz ve son taahhüt yorumları hakkında da geri bildirim sağlar .


0

Listelediğiniz uzak menşein gerçekten eski bir klon değil, istediğiniz depo olduğundan emin olun.


0

Sonunda istediğimi elde etmek için bir karmaşa boru hattı yaptım. Uzak mesafeden dalları birleştirdim:

git branch -r --all --merged \
    | tail -n +2 \
    | grep -P '^  remotes/origin/(?!HEAD)' \
    | perl -p -e 's/^  remotes\/origin\///g;s/master\n//g'

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.