Frage Git holt Remote Branch


Mein Kollege und ich arbeiten an demselben Repository, das wir in zwei Zweige für verschiedene Projekte technisch aufgeteilt haben, aber sie haben Ähnlichkeiten, so dass wir manchmal von der Verzweigung zum * Master zurückkehren wollen.

Ich habe jedoch die Filiale. Meine Frage ist, wie kann mein Kollege diesen Zweig speziell ziehen? EIN git clone der Repo scheint die Filialen nicht lokal für ihn zu schaffen, obwohl ich sie nach einem Schub an meinem Ende live auf der Toilette sehen kann.

Auch, als ich ursprünglich den Zweig machte, tat ich es -b checkout. Nicht sicher, ob das viel Unterschied macht?

iMac:test_solar dave$ git branch -r
origin/HEAD -> origin/master
origin/daves_branch
origin/discover
origin/master

git fetch origin discover
git checkout discover

Dies sind die Befehle, die ich ausgeführt habe. Aber es funktioniert definitiv nicht. Ich möchte in der Lage sein, diese Zweigstelle auszuchecken und dann nur die Verzweigungsänderungen von verschiedenen Mitarbeitern oder Arbeitsstationen zurückzuschieben und rückgängig zu machen.


1597
2018-03-02 17:06


Ursprung


Antworten:


Sie müssen eine lokale Verzweigung erstellen, die eine entfernte Verzweigung verfolgt. Der folgende Befehl erstellt eine lokale Verzweigung namens daves_branchVerfolgen der Remote-Zweigstelle Herkunft / daves_branch. Wenn Sie Ihre Änderungen übertragen, wird der Remote-Zweig aktualisiert.

Für die meisten Versionen von Git:

git checkout --track origin/daves_branch

--track ist Kurzschrift für git checkout -b [branch] [remotename]/[branch] wo [remotename] ist Ursprung In diesem Fall und [Zweig] ist doppelt so groß, daves_branch in diesem Fall.

Für Git 1.5.6.5 brauchst du das:

git checkout --track -b daves_branch origin/daves_branch

Für Git 1.7.2.3 und höher ist das genug (vielleicht früher begonnen, aber das ist die früheste Bestätigung, die ich schnell finden konnte):

git checkout daves_branch

Beachten Sie, dass dieser Befehl bei den letzten Git-Versionen keine lokale Verzweigung erstellt und Sie in den Status "Abgelöste HEAD" versetzt. Wenn Sie eine lokale Niederlassung wünschen, verwenden Sie die --track Möglichkeit. Alle Details hier: http://git-scm.com/book/en/v2/Git-Branching-Remote-Branches#Tracking-Branches


2215
2018-03-02 17:45



Ich habe benutzt fetch gefolgt von checkout ...

git fetch <remote> <rbranch>:<lbranch> 
git checkout <lbranch>

... woher <rbranch> ist der entfernte Zweig oder Quellenref und <lbranch> ist das noch nicht nicht existent lokale Niederlassung oder Zielref Sie möchten verfolgen und den gleichen Namen wie den Remote-Zweig oder die Quelle angeben. Dies wird unter erklärt Optionen in der Erklärung von <refspec>.

Git ist so schlau, dass es automatisch den ersten Befehl abschließt, wenn ich Tab nach den ersten Buchstaben des entfernten Zweiges. IE: Ich muss nicht einmal den lokalen Zweig benennen, Git kopiert automatisch den Namen des entfernten Zweiges für mich. Danke Git!

Ebenso wie die Antwort in diesem ähnlichen SO Post zeigt, wenn Sie den lokalen Zweig nicht in fetch, können Sie es immer noch erstellen, wenn Sie es mit dem -b Flagge. IE:  git fetch <remote> <branch> gefolgt von git checkout -b <branch> <remote>/<branch> tut genau dasselbe wie meine anfängliche Antwort. Und offensichtlich, wenn Ihr Repo hat einziger Remote, dann können Sie einfach tun git checkout <branch> nach fetch und es wird eine lokale Niederlassung für Sie erstellen. Z.B: Sie haben gerade ein Repo geklont und möchten weitere Filialen von der Fernbedienung aus überprüfen.

Ich glaube, dass einige der Dokumentation für fetch möglicherweise wörtlich kopiert worden pull. Insbesondere der Abschnitt über <refspec> im Optionen ist dasselbe. Das glaube ich aber nicht fetch wird immer merge, so dass Sie die Zielseite des Doppelpunkts leer lassen fetch  sollte nichts tun.

Beachten Sie, dass git fetch <remote> <refspec> Kurzform für git fetch <remote> <refspec>: was würde also nichts tun, aber git fetch <remote> <tag> ist das gleiche wie git fetch <remote> <tag>:<tag> das sollte die Fernbedienung kopieren <tag> örtlich.

Ich denke, das ist nur hilfreich, wenn Sie einen entfernten Zweig lokal kopieren, aber nicht unbedingt sofort auschecken möchten. Sonst würde ich jetzt verwenden die angenommene Antwort oben, die im ersten Abschnitt des Kasse Beschreibung und später in der Optionen Abschnitt unter der Erklärung von --trackweil es ein 1-Liner ist. Gut... Art von einem 1-Liner, weil du würdest immer noch muss rennen git fetch <remote> zuerst.

FYI: Die Reihenfolge der <refspecs> (Quelle: Ziel) erklärt die bizarre Vor-Git-1.7-Methode für Löschen von entfernten Niederlassungen. IE: Schieben Sie nichts in das Ziel refspec.


740
2018-04-19 00:45



Wenn Sie versuchen, eine neue Remote-Zweigstelle (die nur auf der Remote-Station, aber nicht lokal vorhanden ist) zu "checken", benötigen Sie Folgendes:

git fetch origin
git checkout --track origin/<remote_branch_name>

Dies setzt voraus, dass Sie abholen möchten Ursprung. Wenn nicht, ersetzen Ursprung von Ihrem Fernbedienung Name.


270
2018-05-17 12:14



Um myBranch auszumachen, das existiert remote und nicht lokal - Das hat bei mir funktioniert:

git fetch --all
git checkout myBranch

Ich habe diese Nachricht bekommen:

Branch myBranch set up to track remote branch myBranch from origin
Switched to a new branch 'myBranch'

88
2017-11-12 03:36



Benutzen git branch -a (sowohl lokale als auch entfernte Zweigstellen) oder git branch -r (nur entfernte Zweige), um alle Fernbedienungen und ihre Zweige zu sehen. Sie können dann ein tun git checkout -t remotes/repo/branch an die Fernbedienung und erstellen Sie einen lokalen Zweig.

Es gibt auch einen Befehl git ls-remote, um alle Referenzen und Tags für diese Fernbedienung zu sehen.


37
2018-03-02 17:16



Der Titel und die Frage sind verwirrt:

  • Git holt Remote Branch
  • Wie kann mein Kollege diesen Zweig speziell ziehen?

Wenn die Frage ist, wie kann ich eine Remote-Zweigstelle zum Arbeiten mit oder zum Auschecken einer Remote-Zweigstelle erhalten, ist eine einfachere Lösung:

Mit git (> = 1.6.6) können Sie:

git checkout <branch_name>

Wenn lokal <branch_name> nicht gefunden, aber es gibt einen Tracking-Zweig in genau einer Fernbedienung mit einem passenden Namen, behandeln als äquivalent zu:

git checkout -b <branch_name> --track <remote>/<branch_name>

Weitere Informationen finden Sie in der Dokumentation zu git checkout

Für deinen Freund:

$ git checkout discover
Branch discover set up to track remote branch discover
Switched to a new branch 'discover'

33
2018-03-31 10:48



git checkout -b serverfix origin/serverfix

Dies ist eine übliche Operation, die git die --track shorthand liefert:

git checkout --track origin/serverfix

Tatsächlich ist dies so üblich, dass es sogar eine Verknüpfung für diese Verknüpfung gibt. Wenn der Name des Zweigs, den Sie auschecken möchten (a) nicht existiert und (b) genau mit einem Namen auf nur einer Fernbedienung übereinstimmt, erstellt Git einen Tracking-Zweig für Sie:

git checkout serverfix

Um eine lokale Verzweigung mit einem anderen Namen als der Remote-Verzweigung einzurichten, können Sie einfach die erste Version mit einem anderen lokalen Verzweigungsnamen verwenden:

git checkout -b sf origin/serverfix

Jetzt wird Ihr lokaler Zweig sf automatisch von origin / serverfix ziehen.

Quelle: Pro Git 2nd Edition, geschrieben von Scott Chacon und Ben Straub(Zur besseren Lesbarkeit ausgeschnitten)


24
2018-03-18 00:21



git fetch

git branch -r

git checkout <branch_name>

12
2017-12-04 20:53