Wie rufe ich alle Git-Branches ab?

Lesezeit: 7 Minuten

Benutzer-Avatar
David542

Ich habe ein Git-Repository geklont, das viele Branches enthält. Jedoch, git branch zeigt nur eins:

$ git branch
* master

Wie würde ich alle Zweige lokal so ziehen, wenn ich das mache git branchzeigt es folgendes?

$ git branch
* master
* staging
* etc...

  • Auch diskutiert unter stackoverflow.com/questions/67699/…

    – gliptak

    25. September 2012 um 14:40 Uhr

  • Diese Frage zeigt, wie man alle Verzweigungen erhält, nachdem man die verwendet hat --single-branch Einstellung beim Klonen: stackoverflow.com/questions/17714159/… (git fetch --all wird niemals funktionieren, wenn Sie nur einen Zweig angegeben haben!)

    – Matthew Wilcoxson

    21. Mai 2015 um 17:10 Uhr

  • Sie werden diese Ausgabe niemals sehen, da das Sternchen den Zweig darstellt, der gerade ausgecheckt wird. Da Sie nur eine Filiale auf einmal auschecken lassen können, darf links neben Ihrem Filialeintrag nur ein Sternchen stehen.

    – Robino

    7. Dezember 2015 um 15:09 Uhr

  • Ich habe viele Antworten gesehen, aber keine von ihnen hat erwähnt, was meiner Meinung nach der einfachste Weg ist, das zu tun, was Sie wollen: git clone --bare <repo url> .git (Beachten Sie, dass Sie am Ende “–bare” und “.git” hinzufügen müssen, um das Repo als “nacktes” Repo zu klonen). git config --bool core.bare false (setzt das “bare” Flag auf false), dann git reset --hard (bewegt den HEAD zum aktuellen HEAD im Repo). Nun, wenn Sie git branch Sie sollten alle Branches aus dem geklonten Repo sehen.

    – Gabriel Ferraz

    25. März 2017 um 17:37 Uhr


  • @GabrielFerraz Dann missbrauchst du die Kommentarfunktion auf Stack Overflow. Benutzer können Ihren Kommentar positiv, aber nicht negativ bewerten.

    – Rohr

    7. September 2017 um 14:40 Uhr

Benutzer-Avatar
Learath2

So listen Sie Remote-Zweige auf:

git branch -r

So checken Sie einen Remote-Zweig als lokalen Zweig aus:

git checkout -b local_branch_name origin/remote_branch_name

  • Das ist genau das, wonach ich gesucht habe, als ich die Frage oben gefunden habe. Ich vermute, dass viele Leute, die nach Möglichkeiten suchen, einen entfernten Zweig zu ziehen, den Zweig definitiv nicht in ihre aktuelle Arbeitskopie zusammenführen möchten, aber sie möchten einen lokalen Zweig, der mit dem entfernten identisch ist.

    – Frug

    19. Oktober 2012 um 16:03 Uhr

  • Auch wenn die Filiale lokal nicht sichtbar ist, kann ich das machen git checkout remotebranchnameund es funktioniert. was ist der unterschied zu deiner lösung?

    – Francois Romain

    6. November 2014 um 10:43 Uhr

  • Sein Standardverhalten jetzt. War bei älteren Git-Versionen nicht der Fall. Verwenden git checkout remotebranchname verwendet, um nur eine neue zu erstellen unabhängig Zweig, der benannt ist entfernter Zweigname.

    – Learath2

    15. November 2014 um 13:10 Uhr

  • Die akzeptierte Antwort macht etwas grundlegend anderes und um ehrlich zu sein, verstehe ich nicht einmal, warum es die akzeptierte Antwort ist

    – Learath2

    23. Juli 2015 um 16:28 Uhr

  • Das OP hat nach allen Zweigen gefragt. Diese Antwort macht nur einen.

    – Ted Bigham

    5. August 2016 um 15:19 Uhr

  • Dies macht die Lösung robuster gegenüber Verzweigungsnamen, die Shell-Metazeichen enthalten (gemäß Pinkeens Kommentar zur anderen Antwort), und vermeidet falsche Fehlerausgaben: git branch -r | grep -v — ‘ -> ‘ | während lesen entfernt; do git branch –track “${remote#origin/}” “$remote” 2>&1 | grep -v ‘ existiert bereits’; erledigt

    – Daira Hopwood

    11. August 2015 um 23:28 Uhr


  • Sind Sie sicher, dass git pull --all werden alle lokalen Tracking-Zweige aktualisiert? Soweit ich das beurteilen kann, aktualisiert es nur den aktuellen Zweig von allen Fernbedienungen.

    – Andy

    26. Juli 2016 um 16:07 Uhr

  • Machte dies. Lokale Zweige, die mit entfernten Zweigen übereinstimmen, wurden nicht erstellt. Was ist der Git-Befehl, der einfach sagt: „Ziehe alle Remote-Zweige, die lokale Zweige erstellen, wenn sie nicht existieren?“

    – JosefK

    11. Februar 2017 um 10:47 Uhr

  • @JosephK vielleicht wird deine Fernbedienung nicht angerufen origin? Sehen Sie sich diese Antwort an, die für alle Remote-Namen funktioniert.

    – Tom Hale

    14. September 2018 um 15:53 ​​Uhr

  • @TomHale Es war “Ursprung”, aber danke für deine Antwort – obwohl verrückt, dass so viel notwendig ist, um zu tun, was ein oder vielleicht zwei Flags sein sollten. Ich versuche es jetzt mit Gitless, um zu versuchen, den Wahnsinn einiger Aspekte von Git zu vermeiden.

    – Josef K

    10. Dezember 2018 um 7:33 Uhr

Benutzer-Avatar
GoZoner

Wenn Sie tun:

git fetch origin

dann sind sie alle vor Ort. Wenn Sie dann ausführen:

git branch -a

Sie werden sie als remotes/origin/branch-name aufgelistet sehen. Da sie vor Ort sind, können Sie mit ihnen machen, was Sie wollen. Zum Beispiel:

git diff origin/branch-name 

oder

git merge origin/branch-name

oder

git checkout -b some-branch origin/branch-name

  • Ich habe gerade diese Seite bei Google gefunden … das war die eigentliche Art von Antwort, die ich gesucht habe. Ich habe den ersten Befehl ausprobiert, aber eine Fehlermeldung erhalten: [$ git fetch –all origin fatal: fetch –all does not take a repository argument] — Die Verwendung von “git fetch –all” scheint zu funktionieren. Danke für die Führung!

    – Langda

    29. März 2013 um 18:26 Uhr


  • Behoben (beseitigt --all)

    – GoZoner

    29. März 2013 um 19:47 Uhr

  • git fetch -all holt alle Branches aller Remotes. git fetch origin holt alle Zweige der Fernbedienung origin. Letzteres ist das, was das OP gefragt hat.

    – GoZoner

    24. April 2013 um 19:37 Uhr

  • --all bedeutet “alle Remotes”, nicht “alle Zweige einer bestimmten Remote”. Letzteres wird durch jeden Abruf von einer Fernbedienung impliziert.

    – Raumtaucher

    3. Juni 2013 um 14:58 Uhr

  • Dies ist nicht der Weg, um alle Zweige aus dem Remote-Repo in das lokale Repo zu ziehen.

    – Wladimir Despotovic

    20. November 2016 um 23:41 Uhr

Benutzer-Avatar
mirekphd

$ git remote update
$ git pull --all

Dies setzt voraus, dass alle Branches verfolgt werden.

Wenn dies nicht der Fall ist, können Sie dies in Bash auslösen:

for remote in `git branch -r `; do git branch --track $remote; done

Führen Sie dann den Befehl aus.

Achtung: Bitte lesen Sie die folgenden Warnhinweise.

  • Ich habe gerade diese Seite bei Google gefunden … das war die eigentliche Art von Antwort, die ich gesucht habe. Ich habe den ersten Befehl ausprobiert, aber eine Fehlermeldung erhalten: [$ git fetch –all origin fatal: fetch –all does not take a repository argument] — Die Verwendung von “git fetch –all” scheint zu funktionieren. Danke für die Führung!

    – Langda

    29. März 2013 um 18:26 Uhr


  • Behoben (beseitigt --all)

    – GoZoner

    29. März 2013 um 19:47 Uhr

  • git fetch -all holt alle Branches aller Remotes. git fetch origin holt alle Zweige der Fernbedienung origin. Letzteres ist das, was das OP gefragt hat.

    – GoZoner

    24. April 2013 um 19:37 Uhr

  • --all bedeutet “alle Remotes”, nicht “alle Zweige einer bestimmten Remote”. Letzteres wird durch jeden Abruf von einer Fernbedienung impliziert.

    – Raumtaucher

    3. Juni 2013 um 14:58 Uhr

  • Dies ist nicht der Weg, um alle Zweige aus dem Remote-Repo in das lokale Repo zu ziehen.

    – Wladimir Despotovic

    20. November 2016 um 23:41 Uhr

Benutzer-Avatar
Peter Mortensen

Die Bash for Schleife hat bei mir nicht funktioniert, aber das hat genau das getan, was ich wollte. Alle Zweige von meinem Ursprung werden lokal mit demselben Namen gespiegelt.

git checkout --detach
git fetch origin '+refs/heads/*:refs/heads/*'

Siehe Mike DuPonts Kommentar unten. Ich glaube, ich habe versucht, dies auf einem Jenkins-Server zu tun, der ihn im getrennten Kopfmodus belässt.

  • Das produziert fatal: Refusing to fetch into current branch refs/heads/master of non-bare repository nach einem einfachen Klon. Muss zuerst den Kopf lösen. Ich habe das mit gemacht git checkout <SHA>

    – brannerchinesisch

    15. April 2015 um 17:28 Uhr


  • Meine Lösung mit diesem ist git checkout --detach # detach the head und dann git fetch origin \'+refs/heads/*:refs/heads/*

    – Mike DuPont

    29. Juni 2015 um 15:09 Uhr


  • Dieser hat bei mir funktioniert, außer dass ich auch den Parameter –tags verwende. Ich wünschte, es gäbe ein einfaches Standard-Frontend für Git, die Anzahl einfacher Dinge in Git, die mehr als 10 Stack-Overflow-Antworten benötigen, ist lächerlich!

    – kristianp

    18. Februar 2016 um 23:13 Uhr


  • @kristianp Hast du Ungit oder GitKraken ausgecheckt?

    – drache788

    27. April 2016 um 20:33 Uhr

  • @Pegues Ich denke, es besteht viel Verwirrung darin, wie Tracking funktioniert und welche Rolle es bei der Aktualisierung Ihres lokalen Repos spielt. Sie haben auf jeden Fall Recht, der Befehl in diesem Beitrag führt einen Abruf durch, aber wenn Sie die Zweige nicht verfolgen, werden sie nicht abgerufen. Ich schätze meinen Kommentar eher für Anfänger. – Auch die von Ihnen erwähnte Art, einen Zweig zu aktualisieren, ist zu 100% legitim, aber es gibt auch andere Möglichkeiten, dies zu tun ^^

    – basiskarl

    31. Mai um 8:17 Uhr

1330050cookie-checkWie rufe ich alle Git-Branches ab?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy