Ich habe ein Git-Repository geklont, das etwa fünf Zweige enthält. Wenn ich jedoch git branch
ausführe, sehe ich nur einen davon:
$ git branch
* master
Ich weiß, dass ich git branch -a
ausführen kann, um alle Verzweigungen zu sehen, aber wie kann ich alle Verzweigungen lokal abrufen, so dass, wenn ich git branch
aufrufe, das Folgende angezeigt wird?
$ git branch
* master
* staging
* etc...
Auf diese Weise können Sie alle Zweige von allen Remotes abrufen:
git fetch --all
Das ist im Grunde ein Power Move.
fetch
aktualisiert lokale Kopien von entfernten Zweigen, so dass dies immer sicher für Ihre lokalen Zweige ist Aber:
fetch
wird die lokalen Zweige nicht aktualisieren (die die entfernten Zweige verfolgen); wenn Sie Ihre lokalen Zweige aktualisieren wollen, müssen Sie immer noch jeden Zweig ziehen.
fetch
wird keine lokalen Zweige erstellen (die ferne Zweige verfolgen), Sie müssen dies manuell tun. Wenn Sie alle entfernten Zweige auflisten wollen:
git branch -a
Zum Aktualisieren lokaler Zweige, die entfernte Zweige verfolgen:
git pull --all
Dies kann jedoch noch unzureichend sein. Es wird nur für Ihre lokalen Zweige funktionieren, die entfernte Zweige verfolgen. Um alle entfernten Zweige zu verfolgen, führen Sie diesen Oneliner VOR git pull --all
aus:
git branch -r | grep -v '\->' | while read remote; do git branch --track "${remote#origin/}" "$remote"; done
git branch -r | grep -v '\->' | while read remote; do git branch --track "${remote#origin/}" "$remote"; done
git fetch --all
git pull --all
(Es scheint, dass pull alle Zweige von allen Remotes holt, aber ich hole immer zuerst, nur um sicher zu sein).
Führen Sie den ersten Befehl nur aus, wenn es entfernte Zweige auf dem Server gibt, die nicht von Ihren lokalen Zweigen erfasst werden.
P.S. AFAIK sind git fetch --all
und git remote update
gleichwertig.
Kamil Szot's Kommentar, der von vielen als nützlich empfunden wurde.
Ich musste verwenden:
for remote in
git branch -r
; do git branch --track ${remote#origin/} $remote; doneweil dein Code lokale Zweige mit dem Namen
origin/branchname
erzeugte und Ich erhielt die Meldung "refname 'origin/branchname' ist mehrdeutig, wenn ich darauf verwies.
Um entfernte Zweige aufzulisten:
git branch -r
Sie können sie als lokale Zweige auschecken mit:
git checkout -b LocalName origin/remotebranchname
$ git remote update
$ git pull --all
Dies setzt voraus, dass alle Zweige verfolgt werden.
Wenn das nicht der Fall ist, können Sie dies in der Bash auslösen:
for remote in `git branch -r `; do git branch --track $remote; done
Dann führen Sie den Befehl aus.