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?


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.


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? .


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

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.


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.