Verfolgen Sie einen neuen Remote-Zweig, der auf GitHub erstellt wurde

183

Ich habe bereits einen lokalen Hauptzweig, der den entfernten Hauptzweig eines Github-Projekts verfolgt. Jetzt hat ein Mitarbeiter von mir im selben Projekt eine neue Niederlassung erstellt, und ich möchte Folgendes entsprechend tun:

  1. Erstellen Sie lokal einen neuen Zweig
  2. Machen Sie diesen neuen Zweig zum neu erstellten Remote-Zweig.

Wie soll ich es richtig machen?

MLister
quelle
2
git checkout --track -b <lokaler Zweig> <remote> / <verfolgter Zweig> funktioniert auch.
MLister
14
... oder einfach nur git checkout -t <remote>/<whatever>. Wenn es nur einen Remote-Tracking-Zweig gibt, der endet <whatever>, können Sie sogar einfach git checkout <whatever>raten, was Sie meinen.
Mark Longair

Antworten:

251
git fetch
git branch --track branch-name origin/branch-name

Der erste Befehl stellt sicher, dass Sie eine Remote-Verzweigung im lokalen Repository haben. Der zweite Befehl erstellt einen lokalen Zweig, der den entfernten Zweig verfolgt. Es wird davon ausgegangen, dass Ihr Remote-Name originund der Filialname lautet branch-name.

--track Die Option ist standardmäßig für Remote-Zweige aktiviert und kann weggelassen werden.

max
quelle
3
Wenn ich das mache, bekomme ich eine Warnung: refname 'branch-name' ist mehrdeutig.
Ultrasaurus
19
Wenn es nur einen Remote-Zweig mit diesem Zweignamen gibt, können Sie dies einfach tun git checkout <branchname>und git überprüft ihn automatisch und richtet einen Tracking-Zweig ein. Ich wollte nur wiederholen, was @Mark Longair oben in diesem Kommentar gesagt hat : stackoverflow.com/questions/11262703/… .
Ryan Walls
Der Name meiner Gegenstelle ist remotes/origin/develop? Sollte es nicht einfach sein origin/develop? Sind das die gleichen?
ス レ ッ ク ス
2
Ich musste tun git fetch --all, sonst würden keine neuen Zweige geholt
mschrimpf
Wie geht das in Eclipse? Wenn ich damit fertig bin cmd, erkennt Eclipse den neuen Zweig?
Deckard
31

Wenn Sie keine lokale Niederlassung haben, ist dies wirklich so einfach wie:

git fetch
git checkout <remote-branch-name>

Wenn Sie beispielsweise abrufen und ein neuer Remote-Tracking-Zweig namens aufgerufen wird origin/feature/Main_Page, gehen Sie wie folgt vor :

git checkout feature/Main_Page

Dadurch wird ein lokaler Zweig mit demselben Namen wie der Remote-Zweig erstellt, der diesen Remote-Zweig verfolgt. Wenn Sie mehrere Fernbedienungen mit demselben Zweigstellennamen haben, können Sie die weniger mehrdeutigen verwenden:

git checkout -t <remote>/<remote-branch-name>

Wenn Sie den lokalen Zweig bereits erstellt haben und ihn nicht löschen möchten, lesen Sie Wie kann ein vorhandener Git-Zweig einen Remote-Zweig verfolgen? .

Kotoole
quelle
1
git checkout 1.5-branch( remotes/upstream/1.5-branchist in der Ausgabe von git branch -a) führt dazu, dass dies error: pathspec '1.5-branch' did not match any file(s) known to git.geändert wird, was zu einem git checkout upstream/1.5-branchgetrennten HEAD führt und kein lokaler Zweig erstellt wird. Ich denke, dieser Teil der Antwort ist einfach falsch. Dies ist mit Git 2.4.3
Piotr Dobrogost
Der erste Befehl funktioniert für mich in Git 1.9.3, auch für verschiedene Fernbedienungen. Möglicherweise hat sich dieses Verhalten geändert. Das Ergebnis Ihres zweiten Befehls ist das, was ich erwarten würde. Ohne -t geben Sie nicht an, dass Sie etwas anderes tun möchten, als sich diese bestimmte Version auf der Fernbedienung anzusehen.
Kotoole
1
Ich stimme @PiotrDobrogost zu, ich glaube, Ihre Aussage "Dies schafft einen lokalen Zweig mit dem gleichen Namen ..." ist falsch. Beim Abrufen wird auf diese Weise ein Fernverfolgungszweig für jeden Zweig auf der Fernbedienung erstellt. Das bedeutet, dass eine Filiale in Ihrem lokalen Repo benannt ist <remote>/<branch>. Ein Fernverfolgungszweig ist schreibgeschützt und gibt an, wo sich dieser Zweig beim letzten Abruf auf der Fernbedienung befand. Wenn Sie checkoutdiesen Zweig anrufen , werden Sie in den getrennten HEAD-Modus versetzt, genau wie Piotr sagt. Beachten Sie, dass durch die Angabe des abzurufenden Remote-Zweigs das Erstellen unerwünschter Remote-Tracking-Zweige vermieden wird.
Scanny
2
Um es noch einmal klar zu machen: Ich schlage vor, den Befehl zu verwenden git checkout feature-branch. Ich schlage NICHT vor, den Befehl zu verwenden, git checkout origin/feature-branch der, wie Sie beide betont haben, zu einem nicht hilfreichen, abgenommenen Kopf führt.
Kotoole
viel einfacher und auf den Punkt. Funktioniert gut mit Git 2.8.3 auf Cygwin.
Felipe Alvarez
29

Zunächst müssen Sie das Remote-Repository abrufen:

git fetch remoteName

Dann können Sie den neuen Zweig erstellen und so einrichten, dass er den gewünschten Remote-Zweig verfolgt:

git checkout -b newLocalBranch remoteName/remoteBranch

Sie können auch "git branch --track" anstelle von "git checkout -b" verwenden, wie maximal angegeben.

git branch --track newLocalBranch remoteName/remoteBranch
Anghel Contiu
quelle
Wenn Sie checkout -beinen Remote-Zweig als Ausgangspunkt verwenden, ist die Verwendung tatsächlich nicht erforderlich --track.
5
Wie in diesem Kommentar erwähnt , wird der lokale Zweig automatisch so eingerichtet, dass er den entfernten Zweig verfolgt , wenn Sie dies nur tun git checkout <branchname>und es einen Remote-Zweig mit demselben Namen gibt (nachdem Sie a ausgeführt haben git fetch).
9

Wenn der Zweig kein Remote-Zweig ist, können Sie Ihren lokalen Zweig direkt an den Remote-Zweig senden.

git checkout master
git push origin master

oder wenn Sie einen Entwicklungszweig haben

git checkout dev
git push origin dev

oder wenn der Remote-Zweig vorhanden ist

git branch dev -t origin/dev

Es gibt einige andere Möglichkeiten, einen entfernten Zweig zu pushen.

René Höhle
quelle
Dann wählen Sie die dritte Option. Wenn der Remote-Zweig vorhanden ist, können Sie einen lokalen Zweig erstellen und den Remote-Zweig verfolgen :) Dies entspricht der Version von max, ist jedoch kürzer.
René Höhle