Wie liste ich alle Remote-Zweige in Git 1.7+ auf?


631

Ich habe es versucht git branch -r, aber das listet nur entfernte Zweige auf, die ich lokal verfolgt habe. Wie finde ich die Liste derer, die ich nicht habe? (Es ist mir egal, ob der Befehl alle entfernten Zweige auflistet oder nur diejenigen, die nicht verfolgt werden.)


11
Sie meinen , Sie den Standard Refspec geändert haben, so dass git fetchund git remote updatesie holen nicht alle Filialen der Fernbedienung? Denn sonst könnte man einfach holen dann benutzen git branch -r...
Cascabel

2
Ich muss haben. git branch -rzeigte mir nur entfernte Zweige, die ich lokal verfolgt hatte. Es funktioniert jetzt besser.
James A. Rosen

Antworten:


800

Für die überwiegende Mehrheit [1] der Besucher hier die richtige und einfachste Antwort auf die Frage "Wie liste ich alle Remote-Zweige in Git 1.7+ auf?" ist:

git branch -r

Für eine kleine Minderheit [1] git branch -r funktioniert das nicht. Wenn git branch -res nicht funktioniert, versuchen Sie:

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

Wenn git branch -rnicht funktioniert, dann vielleicht als Cascabel sagt „Sie die Standard - Refspec geändert haben, so dass git fetchund git remote updatesie holen nicht alle remote‚s Filialen“ .


[1] Zum Zeitpunkt des Schreibens dieser Fußnote 2018 - Februar habe ich mir die Kommentare angesehen und festgestellt, dass die git branch -rWerke für die überwiegende Mehrheit (etwa 90% oder 125 von 140 ) funktionieren .

Wenn git branch -rdies nicht funktioniert, git config --get remote.origin.fetchenthält check einen Platzhalter ( *) gemäß dieser Antwort


15
Sie können dies auch tun, git ls-remote [url]damit Sie es nicht zuerst klonen müssen :)
Zsub

142
Diese Antwort ist richtig, aber irreführend. Das erste, was Benutzer, die von Suchmaschinen hierher kommen, sehen sollten, ist: git branch -rDa dies die richtige und einfachste Antwort ist, hatte der Fragesteller einen Sonderfall, in dem er sein Verhalten geändert hat, das git branch -rdie meisten Benutzer, die hierher kommen, nicht ändern haben
Stephan

24
@Stephan: Bist du dir da sicher? git branch -rhat auch bei mir nicht funktioniert. Es werden nur die bereits lokal verfolgten Zweige aufgelistet. Aber git ls-remote --headsaufgelistet alle Zweige im Remote-Repository verfügbar ...
Rexford

2
Wenn Sie von den über git ls-remote(und nicht unter) aufgelisteten Zweigen abrufen möchtengit branch -r , müssen Sie git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"vor dem Abrufen ausführen , wie unter stackoverflow.com/a/26649770/873282 beschrieben .
Koppor

11
Vergessen Sie nicht, dies git fetch --allvorher zu tun , um alle aktuellen Remote-Zweige abzurufen.
A. Attia

172

remote show Zeigt alle Zweige auf der Fernbedienung an, einschließlich derjenigen, die nicht lokal verfolgt werden, und sogar derjenigen, die noch nicht abgerufen wurden.

git remote show <remote-name>

Außerdem wird versucht, den Status der Zweige in Bezug auf Ihr lokales Repository anzuzeigen:

> 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)

Genau. Nicht abgerufen, nicht lokal verfolgt.
Thufir

3
branch_that_is_not_tracked tracked?
Piotr Dobrogost

3
@PiotrDobrogost Ja! branch_that_is_not_trackedist ein Zweig, der von keinem lokalen Git-Zweig verfolgt wird. Es wurde jedoch in das lokale Repository abgerufen (es gibt also einen Remote-Zweig). Aus irgendeinem seltsamen Grund wird git remote showdieser Status trackedaufgerufen, obwohl es keinen lokalen Zweig gibt, der die Fernbedienung verfolgt. In diesem Fall ist das Gegenteil von dem trackedheißt new, das heißt „nicht abgerufen“.
Klas Mellbourn

Dies funktioniert nicht programmatisch, zu schwer zu analysieren
Alexander Mills

Dies war ein Sonderfall, bei dem ich einen Remote-Zweig lokal gezogen hatte, der dann auf der Remote entfernt wurde. Dann git branch -rschlägt vor, dass es noch einen entfernten Zweig gibt, git remote show originzeigt dies aber refs/remotes/origin/my-now-dead-branch stale (use 'git remote prune' to remove). Viel nützlicher!
icc97

53
git branch -a | grep remotes/*

10
Dies entspricht im Grunde dem git branch -r, was laut OP nicht gut genug war.
Cascabel

9
beide tatsächlich git branch -aund git branch -rlisten Sie alle Remote - Niederlassungen für mich, ich bin nicht sicher , ob das, was der OP sagte , ist wahr. Ich habe gerade ein Test-Repository eingerichtet und dies überprüft (hatte nur Master Tracking Origin / Master, sah aber immer noch alle Remote-Zweige mit beiden Flags).
Idan K

2
Anscheinend werden hier nicht alle Remote-Zweige aufgelistet, wenn ich von einem vorhandenen Pulled Repo klone und dann manuell den Ursprung auf den Git-Server zeige. Die akzeptierte Antwort behandelt diesen Fall.
Nielsbot

Diese Lösung scheint keine entfernten Zweige aufzulisten, die seit dem letzten Abruf erstellt wurden.
Anubian Noob

Das Seltsame: Seit Jahren benutze ich git fetchgefolgt von git branch -a, was für mich erst vor kurzem zu scheitern begann. Vielleicht wurde das Git-Verhalten geändert?
Sebastian Mach

39

Mit git branch -rListen werden alle Remote-Zweige git branch -aaufgelistet und alle Zweige auf lokaler und Remote- Ebene aufgelistet . Diese Listen sind jedoch veraltet. Führen Sie diese Liste aus, um sie auf dem neuesten Stand zu halten

git remote update --prune

Dadurch wird Ihre lokale Zweigstellenliste mit allen neuen von der Fernbedienung aktualisiert und alle nicht mehr vorhandenen entfernt. Wenn Sie diesen Aktualisierungsbefehl ohne --prune ausführen, werden neue Zweige abgerufen, jedoch keine mehr auf der Fernbedienung gelöscht.

Sie können dieses Update beschleunigen, indem Sie eine Fernbedienung angeben. Andernfalls werden Updates von allen von Ihnen hinzugefügten Fernbedienungen abgerufen

git remote update --prune origin

Dies hat mein Problem behoben - 'git branch -r' funktioniert jetzt für mich.
Francis Norton

27

Aber

git branch -ar

Sollte es tun.


41
Die Übergabe beider Argumente ist überflüssig. -rGibt nur entfernte Zweige zurück. -aGibt sowohl lokale als auch entfernte Zweige zurück. Somit git branch -aund git branch -arbeide den gleichen Ausgang liefern.
Walter Roman

19

Sie können auch git fetchgefolgt von a git branch -r. Ohne Abruf sehen Sie nicht die aktuellsten Zweige.


git fetch --allalle aktuellen Filialen zu haben
A. Attia

19

Git Branching - Remote Branches

git ls-remote

Git-Dokumentation .


git ls-remote - Köpfe, um spezifischere Ergebnisse zu erhalten
Wolfgang Fahl

1
Dies ist der einzige Befehl , dass mein Zweig listet auch ich versehentlich gedrückt , ohne heads/in refs/heads/features/my-branch, danke!
msa


9

TL; TR;

Dies ist die Lösung Ihres Problems:

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

oder:

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

5

Der beste Befehl zum Ausführen ist git remote show [remote]. Dies zeigt alle entfernten und lokalen Zweige an, die verfolgt und nicht verfolgt werden.

Hier ist ein Beispiel aus einem Open Source-Projekt:

> 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)

Wenn wir nur die Remote-Zweige erhalten möchten, können wir verwenden grep. Der Befehl, den wir verwenden möchten, wäre:

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

Mit diesem Befehl:

> 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

Sie können auch einen Alias ​​dafür erstellen:

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

Dann kannst du einfach rennen git branches.




4

Führen Sie einfach einen git fetchBefehl aus. Es werden alle Remote-Zweige in Ihr lokales Repository gezogen und anschließend git branch -aalle Zweige aufgelistet.


1

Wenn es einen Remote-Zweig gibt, von dem Sie wissen, dass er aufgelistet werden sollte, der jedoch nicht aufgelistet wird, möchten Sie möglicherweise überprüfen, ob Ihr Ursprung ordnungsgemäß eingerichtet ist:

git remote show origin

Wenn das alles gut ist, sollten Sie vielleicht ein Update ausführen:

git remote update

Vorausgesetzt, das läuft erfolgreich, sollten Sie in der Lage sein, das zu tun, was die anderen Antworten sagen:

git branch -r

1

Mit diesem Befehl

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

Es listet alle Remote-Zweige auf, einschließlich Commit-Nachrichten und Commit-IDs, auf die von Remote-Zweigen verwiesen wird.


1

Ich würde ... benutzen:

git branch -av

Dieser Befehl zeigt Ihnen nicht nur die Liste aller Zweige an, einschließlich der entfernten Zweigstellen /remote, sondern gibt Ihnen auch das *Feedback zu den Aktualisierungen und den letzten Festschreibungskommentaren.


0

Stellen Sie sicher, dass der Remote-Ursprung, den Sie auflisten, wirklich das gewünschte Repository ist und kein älterer Klon.


0

Am Ende habe ich eine Mess-Shell-Pipeline erstellt, um das zu bekommen, was ich wollte. Ich habe gerade Zweige von der Ursprungsfernbedienung zusammengeführt:

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.