8559 Stimmen

Wie prüfe ich einen entfernten Git-Zweig aus?

Jemand hat einen Zweig namens test mit git push origin test in ein gemeinsames Repository geschoben. Ich kann den Zweig mit git branch -r sehen. Wie kann ich den Remote-Zweig test auschecken? Ich habe es versucht:

  • git checkout test, was nichts macht
  • git checkout origin/test gibt * (kein Zweig)

52 Stimmen

Ich denke, dieser Thread ist nicht hilfreich. Nichts scheint zu funktionieren, die ursprüngliche Frage scheint in vielen der Antworten verloren gegangen zu sein. Ich habe jedes Wort gelesen, alles unten ausprobiert und habe keine Ahnung, wie man das machen soll, was der OP machen möchte.

58 Stimmen

Ich habe das Gefühl, als würde ich verrückt werden. Ich versuche, einen branch von einem upstream und nicht nur von origin zu auszuchecken, und jede empfohlene Antwort ist überhaupt nicht hilfreich (im wahrsten Sinne des Wortes). EDIT - entschuldigen Sie bitte, die Vielzahl der Vorschläge in den beiden erstplatzierten Antworten war nutzlos; der dritte (git branch test origin/test) funktioniert. Schön, dass die beiden ersten Antworten 20x so viele Stimmen haben...

0 Stimmen

Vielleicht nützlich für jemand anderen: Als ich die Atom-Editor-Benutzeroberfläche benutzte, um Änderungen abzurufen und zu ziehen, zog sie Änderungen am "main" branch, aber erstellte keine lokale Referenz zum zweiten Remote-Branch. Die Verwendung von git fetch in der Befehlszeile hat diese Referenz erstellt, dann konnte ich den Branch gemäß mehrerer Antworten auschecken.

11541voto

hallski Punkte 116251

Die Antwort wurde je nachdem aufgeteilt, ob ein oder mehrere entfernte Repositorys konfiguriert sind. Der Grund dafür ist, dass für den Fall eines einzelnen Remote einige der Befehle vereinfacht werden können, da es weniger Mehrdeutigkeiten gibt.

Aktualisiert für Git 2.23: Für ältere Versionen siehe den Abschnitt am Ende.

Mit einem Remote

In beiden Fällen beginnen Sie damit, vom Remote-Repository zu fetchen, um sicherzustellen, dass Sie alle neuesten Änderungen heruntergeladen haben.

$ git fetch

Dies holt alle Remote-Branches für Sie. Sie können die verfügbaren Branches mit auschecken:

$ git branch -v -a

...
remotes/origin/test

Die Branches, die mit remotes/* beginnen, können als schreibgeschützte Kopien der Remote-Branches betrachtet werden. Um an einem Branch zu arbeiten, müssen Sie einen lokalen Branch erstellen. Dies wird mit dem Git-Befehl switch (seit Git 2.23) durchgeführt, indem Sie ihm den Namen des Remote-Branches geben (ohne den Remote-Namen):

$ git switch test

In diesem Fall nimmt Git an (kann mit --no-guess deaktiviert werden), dass Sie versuchen, den Remote-Branch mit dem gleichen Namen zu auschecken und zu verfolgen.

Mit mehreren Remotes

Im Fall mehrerer Remote-Repositorys muss das Remote-Repository explizit benannt werden.

Wie zuvor, beginnen Sie mit dem Abrufen der neuesten Remote-Änderungen:

$ git fetch origin

Dies holt alle Remote-Branches für Sie. Sie können die verfügbaren Branches mit auschecken:

$ git branch -v -a

Mit den Remote-Branches in der Hand müssen Sie nun den Branch, an dem Sie interessiert sind, mit -c auschecken, um einen neuen lokalen Branch zu erstellen:

$ git switch -c test origin/test

Weitere Informationen zur Verwendung von git switch:

$ man git-switch

Vor Git 2.23

git switch wurde in Git 2.23 hinzugefügt, zuvor wurde git checkout verwendet, um Branches zu wechseln.

Um mit nur einem einzelnen Remote-Repository auszuchecken:

git checkout test

Wenn mehrere Remote-Repositorys konfiguriert sind, wird es etwas länger:

git checkout -b test /test

480 Stimmen

Um dies zu erweitern: Git erlaubt es Ihnen nicht, an den Branches einer anderen Person zu arbeiten. Sie können nur an Ihren eigenen arbeiten. Wenn Sie also zu einem Branch einer anderen Person hinzufügen möchten, müssen Sie Ihre eigenen "Kopie" dieses Branches erstellen, was der obige Befehl tut (nun, er erstellt auch Ihren Branch und ruft ihn ab).

158 Stimmen

Wenn es sich um einen neuen Remote-Zweig handelt, müssen Sie möglicherweise git fetch ausführen, bevor Sie dies tun, damit git sich über origin/test im Klaren ist.

65 Stimmen

...und das würdest du mit git fetch origin test tun

1520voto

Jakub Narębski Punkte 286531

Seitenvermerk: Mit modernem Git (>= 1.6.6) können Sie einfach verwenden

git checkout test

(beachten Sie, dass es 'test' und nicht 'origin/test' ist), um magisches DWIM-mery durchzuführen und einen lokalen Branch 'test' für Sie zu erstellen, für den der Upstream-Zweig der Remote-Tracking-Branch 'origin/test' wäre.


Das * (no branch) im git branch Output bedeutet, dass Sie sich auf einem unbenannten Branch befinden, im sogenannten "detached HEAD" Zustand (HEAD zeigt direkt auf den Commit und ist keine symbolische Verweis auf einen lokalen Branch). Wenn Sie einige Commits auf diesem unbenannten Branch gemacht haben, können Sie jederzeit einen lokalen Branch vom aktuellen Commit erstellen:

git checkout -b test HEAD

Ein modernerer Ansatz, wie in den Kommentaren vorgeschlagen:

@Dennis: git checkout , zum Beispiel git checkout origin/test führt zu einem detached HEAD / unbenannten Branch, während git checkout test oder git checkout -b test origin/test zu einem lokalen Branch test führt (mit remote-tracking Branch origin/test als Upstream) – Jakub Narebski 9. Jan. '14 um 8:17

Hervorhebung von git checkout origin/test

39 Stimmen

Nicht überraschend, aber diese Version wurde in den letzten Jahren veröffentlicht - wenn man diese Syntax kennt, kann man viel Zeit sparen, da immer noch viele alte Dokumentationen und Kommentare kursieren, die die ältere Methode für dies vorschlagen.

13 Stimmen

"modernes Git" - nur zur Information, auf welche Version beziehst du dich? Manchmal müssen wir auf Systemen arbeiten, die ältere Distributionen ausführen.

14 Stimmen

@aidan Wenn Sie eine Antwort wie Fehler: Pfadangabe 'branch_name' stimmte mit keiner Datei überein, die git bekannt ist. erhalten, sollten Sie zuerst ein git fetch durchführen.

790voto

ndim Punkte 33229

In diesem Fall möchten Sie wahrscheinlich einen lokalen test-Zweig erstellen, der den Remote-test-Zweig verfolgt:

$ git branch test origin/test

In früheren Versionen von git benötigten Sie eine explizite --track-Option, aber das ist jetzt standardmäßig, wenn Sie von einem Remote-Zweig abzweigen.

Um den lokalen Zweig zu erstellen und zu ihm zu wechseln, verwenden Sie:

$ git checkout -b test origin/test

26 Stimmen

Dies erstellt einen lokalen Branch, ohne zu ihm zu wechseln.

2 Stimmen

In Ihrem obigen Vorschlag bash git checkout -b test/origin/test können Sie möchten es mit einem bash git fetch upstream ergänzen, um sicherzustellen, dass Ihr lokales Repository weiß, dass der Remote-Zweig test vorhanden ist. Andernfalls vielen Dank, alles funktioniert wie angekündigt.

0 Stimmen

Das wollte ich eigentlich erreichen. Als ich die anderen Befehle benutzte, landete ich in einem abgetrennten HEAD-Zustand, was ich nicht beabsichtigte. Danke!

573voto

Corey Ballou Punkte 40842

Akzeptierte Antwort funktioniert nicht für dich?

Obwohl die erste und ausgewählte Antwort technisch gesehen korrekt ist, besteht die Möglichkeit, dass du noch nicht alle Objekte und Verweise aus dem Remote-Repository abgerufen hast. Falls dies der Fall ist, wirst du folgenden Fehler erhalten:

$ git checkout -b remote_branch origin/remote_branch

fatal: git checkout: Das Aktualisieren von Pfaden ist mit dem Wechseln von Branches nicht kompatibel.
Hast du beabsichtigt, 'origin/remote_branch' auszuchecken, das nicht als Commit aufgelöst werden kann?

Lösung

Wenn du diese Nachricht erhältst, musst du zuerst ein git fetch origin ausführen, wobei origin der Name des Remote-Repositorys ist, bevor du git checkout remote_branch ausführst. Hier ist ein vollständiges Beispiel mit den Antworten:

$ git fetch origin
remote: Objects zählen: 140, durchgeführt.
remote: Objekte komprimieren: 100% (30/30), durchgeführt.
remote: Insgesamt 69 (delta 36), wiederverwendet 66 (delta 33)
Objekte entpacken: 100% (69/69), durchgeführt.
From https://github.com/githubuser/repo-name
   e6ef1e0..5029161  develop    -> origin/develop
 * [new branch]      demo       -> origin/demo
   d80f8d7..359eab0  master     -> origin/master

$ git checkout demo
Branch demo wurde eingerichtet, um den Remote-Branch demo von origin zu verfolgen.
Wechsel zu einem neuen Branch 'demo'

Wie du sehen kannst, hat das Ausführen von git fetch origin sämtliche Remote Branches abgerufen, für die wir noch nicht lokal eingerichtet waren. Von diesem Punkt an, da wir jetzt einen Verweis auf den Remote-Branch haben, können wir ganz einfach git checkout remote_branch ausführen und von den Vorteilen des Remote-Trackings profitieren.

0 Stimmen

Vielen Dank! git checkout -b branch_name hat bei mir funktioniert.

402voto

Sahil kalra Punkte 7248

Ich habe die obige Lösung versucht, aber es hat nicht funktioniert. Versuche das hier, es funktioniert:

git fetch origin 'remote_branch':'local_branch_name'

Dies wird den Remote-Zweig abrufen und einen neuen lokalen Zweig erstellen (falls noch nicht vorhanden) mit dem Namen local_branch_name und den Remote-Zweig darin verfolgen.

52 Stimmen

Dies hat bei mir funktioniert, als weder git fetch origin noch git remote update lokale Branches erstellt haben. Ich bin mir nicht sicher, warum.

10 Stimmen

Dies war der direkteste Weg, um das zu erreichen, was ich brauchte, nämlich einen Remote-Zweig (nicht Master) zu verwenden, um einen neuen Zweig zu erstellen.

11 Stimmen

Hat einwandfrei funktioniert, besonders wenn Sie einen einzelnen Zweig von einem Remote mit mehreren Zweigen geklont haben.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X