it-swarm.com.de

Git holen Remote-Zweig

Mein Kollege und ich arbeiten an demselben Repository, das wir für verschiedene Projekte in jeweils zwei Zweige unterteilt haben. Da diese jedoch Ähnlichkeiten aufweisen, möchten wir uns gelegentlich wieder auf den * master aus dem branch festlegen.

Ich habe jedoch die branch. Meine Frage ist: Wie kann mein Kollege diesen Zweig gezielt ziehen?

Ein git clone des Repos scheint die Zweige nicht lokal für ihn zu erstellen, obwohl ich sie nach einem Push on my end live auf unfuddle sehen kann.

Als ich ursprünglich den Zweig gemacht habe, habe ich auch -b checkout gemacht. Nicht sicher, ob das einen großen Unterschied macht?

$ 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 Verzweigung zu überprüfen und dann nur die Änderungen der Verzweigungen von verschiedenen Mitarbeitern oder Arbeitsstationen zurückzuschieben und festzuschreiben.

1986
David

Sie müssen eine lokale Verzweigung erstellen, die eine entfernte Verzweigung verfolgt. Mit dem folgenden Befehl wird ein lokaler Zweig mit dem Namen daves_branch erstellt, der den fernen Zweig Origin/daves_branch verfolgt. Wenn Sie Ihre Änderungen übertragen, wird der Remote-Zweig aktualisiert.

Für die neuesten Versionen von Git:

git checkout --track Origin/daves_branch

--track ist eine Abkürzung für git checkout -b [branch] [remotename]/[branch], wobei [remotename] in diesem Fall Origin ist und [branch] doppelt so groß ist, daves_branch in diesem Fall.

Für Git 1.5.6.5 brauchten Sie Folgendes:

git checkout --track -b daves_branch Origin/daves_branch

Für Version 1.7.2.3 und höher ist dies ausreichend (möglicherweise früher gestartet, dies ist jedoch die früheste Bestätigung, die ich schnell finden konnte):

git checkout daves_branch

Beachten Sie, dass mit diesem Befehl in den letzten Git-Versionen keine lokale Verzweigung erstellt wird und Sie in den Status "abgetrennter HEAD" versetzt werden. Wenn Sie eine lokale Niederlassung wünschen, verwenden Sie die Option --track. Alle Details finden Sie hier: http://git-scm.com/book/en/v2/Git-Branching-Remote-Branches#Tracking-Branches

2714
ralphtheninja

Ich habe fetch gefolgt von checkout ...

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

... wobei <rbranch> die entfernte Verzweigung ist oder Quellreferenz und <lbranch> die noch nicht vorhandene lokale Verzweigung ist oder Zielreferenz Sie möchten verfolgen und welchen Namen Sie wahrscheinlich genauso wie den entfernten Zweig oder die Quellreferenz geben möchten. Dies wird unter Optionen in der Erklärung von <refspec> erklärt.

Git ist so schlau, dass es den ersten Befehl automatisch ausführt, wenn ich tab nach den ersten Buchstaben des entfernten Zweigs. IE: Ich muss nicht einmal den lokalen Zweig benennen, Git kopiert automatisch den Namen des entfernten Zweigs für mich. Danke Git!

Auch als die Antwort in diesem ähnlichen SO Beitrag Wenn Sie den lokalen Zweig in fetch nicht benennen, können Sie ihn dennoch erstellen, wenn Sie ihn mit dem -b auschecken. Flagge. IE:git fetch <remote> <branch> gefolgt von git checkout -b <branch> <remote>/<branch> verhält sich genauso wie meine ursprüngliche Antwort. Und wenn Ihr Repo offenbar nur eine remote hat, können Sie einfach nach fetchgit checkout <branch> eingeben und es wird eine lokale Verzweigung für Sie erstellt. EG: Sie haben gerade ein Repo geklont und möchten zusätzliche Zweige von der Fernbedienung auschecken.

Ich glaube, dass ein Teil der Dokumentation für fetch wörtlich von pull kopiert wurde. Insbesondere der Abschnitt zu <refspec> in options ist derselbe. Ich glaube jedoch nicht, dass fetch jemals merge wird. Wenn Sie also die Zielseite des Doppelpunkts leer lassen, sollte fetch sollte nichts tun .

HINWEIS: Dieser git fetch <remote> <refspec> ist die Abkürzung für git fetch <remote> <refspec>:, was daher nichts bewirken würde, aber git fetch <remote> <tag> ist dieselbe wie git fetch <remote> <tag>:<tag>, der den entfernten <tag> lokal kopieren sollte.

Ich denke, dies ist nur dann hilfreich, wenn Sie einen entfernten Zweig lokal kopieren möchten, ihn aber nicht unbedingt sofort auschecken möchten. Ansonsten würde ich jetzt die oben akzeptierte Antwort verwenden, was im ersten Abschnitt der Checkout-Beschreibung und später im Abschnitt Optionen ausführlich erläutert wird unter der Erklärung von --track, da es ein 1-Liner ist. Nun ... eine Art Einzeiler, weil Sie noch zuerst git fetch <remote> ausführen müssten.

Zu Ihrer Information: Die Reihenfolge des <refspecs> (Quelle: Ziel) erklärt die bizarre Methode vor Git-1.7 für Löschen entfernter Verzweigungen . IE: Nichts in die Zielreferenzspezifikation drücken.

884
Mark Mikofski

Wenn Sie versuchen, einen neuen Remote-Zweig "auszuchecken" (der nur auf dem Remote-Zweig, aber nicht lokal vorhanden ist), benötigen Sie Folgendes:

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

Dies setzt voraus, dass Sie von Origin abrufen möchten. Wenn nicht, ersetzen Sie Origin durch Ihren Remote Namen.

340
paneer_tikka

So überprüfen Sie myBranch, die remote und nicht lokal vorhanden ist:

git fetch --all
git checkout myBranch

Ich habe diese Nachricht erhalten:

Branch myBranch set up to track remote branch myBranch from Origin
Switched to a new branch 'myBranch'
111
David

Verwenden Sie git branch -a (sowohl lokale als auch entfernte Zweige) oder git branch -r (nur entfernte Zweige), um alle Fernbedienungen und ihre Zweige anzuzeigen. Sie können dann einen git checkout -t remotes/repo/branch mit der Fernbedienung ausführen und eine lokale Verzweigung erstellen.

Es gibt auch einen Befehl git ls-remote, mit dem alle Referenzen und Tags für diese Fernbedienung angezeigt werden.

46
Daniel Lee

Der Titel und die Frage sind verwechselt:

  • Git holen Remote-Zweig
  • wie kann mein kollege diesen zweig gezielt ziehen.

Wenn die Frage ist, wie ich einen entfernten Zweig zum Arbeiten bringen oder wie ich einen entfernten Zweig auschecken kann, ist eine einfachere Lösung:

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

git checkout <branch_name>

Wenn local <branch_name> nicht gefunden wird, aber in genau einer entfernten Station ein Verfolgungszweig mit einem passenden Namen vorhanden ist, gilt dies als äquivalent zu:

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

siehe Dokumentation zur Git-Kasse

Für deinen Freund:

$ git checkout discover
Branch discover set up to track remote branch discover
Switched to a new branch 'discover'
37
git checkout -b serverfix Origin/serverfix

Dies ist eine ausreichend verbreitete Operation, bei der git die Abkürzung --track liefert:

git checkout --track Origin/serverfix

Tatsächlich ist dies so häufig, dass es für diese Verknüpfung sogar eine Verknüpfung gibt. Wenn der Filialname, den Sie auschecken möchten (a), nicht vorhanden ist 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 die entfernte Verzweigung einzurichten, können Sie problemlos die erste Version mit einem anderen Namen für die lokale Verzweigung verwenden:

git checkout -b sf Origin/serverfix

Nun wird Ihr lokaler Zweig sf automatisch aus Origin/serverfix ziehen.

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

28
ManuelSchneid3r

Mit diesem einfachen Befehl:

git checkout -b 'your_branch' Origin/'remote branch'
21

Der einfachste Weg, zumindest für mich:

git fetch Origin <branchName>
15
James Rochabrun

Was mir geholfen hat war

1) Anzeigen aller verfügbaren Remote-Zweige (z. B. 'Name des Remote-Zweigs')

git branch -r

2) Erstellen Sie eine lokale Verzweigung mit dem Namen der entfernten Verzweigung

git fetch && git checkout 'remote-branch-name'
14
Arlan T

Sie können den entfernten Zweig auch auf einmal abrufen und auschecken:

git fetch && git checkout the-branch-name
13
Kumar Sambhav
git fetch

git branch -r

git checkout <branch_name>
13
John Rodriguez

Ich tippte

git checkout <branch_name>

und bekam

Branch <branch_name> set up to track remote branch <branch_name> from Origin.
Switched to a new branch '<branch_name>'
12

Der einfachste Weg, einen Zweig abzurufen, der auf einem entfernten Rechner existiert, ist:

git fetch Origin
git checkout branchName

Sie können sehen, ob es auf Remote bereits vorhanden ist:

git branch -r

Dadurch wird der Remote-Zweig zu Ihrem lokalen Zweig abgerufen und der Remote-Zweig automatisch verfolgt.

11
Harshit Agarwal

Manchmal werden Sie gebeten, nicht mit dem Hauptzweig zu fummeln und nur mit dem entfernten Zweig zu arbeiten (wie ich gebeten wurde). Alles, was Sie brauchen, ist der Remote-Zweig.

Gehen Sie folgendermaßen vor, um den Remote-Zweig (ohne den Master) zu klonen

git clone url --branch remote_branch_name

dabei ist remote_branch_name der Name des Remote-Zweigs

Zum Beispiel,

git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git --branch v3.15

Auf diese Weise stellen Sie sicher, dass Sie den Remote-Zweig mit dem Namen des Remote-Zweigs in Ihren lokalen Zweig klonen.

Wenn Sie nun Ihren Code und Push festschreiben, wird der Code nur an diesen Zweig gesendet.

10
ganezdragon

git fetch --all & git checkout <branch name>

7
Jerome Anthony

Nehmen wir an, Ihre Fernbedienung ist [email protected] und Sie möchten den Zweig random_branch. Der Prozess sollte wie folgt sein:

  1. Überprüfen Sie zuerst die Liste Ihrer Fernbedienungen durch

    git remote -v

  2. Wenn Sie in der Ausgabe des obigen Befehls nicht [email protected] remote haben, würden Sie es mit hinzufügen

    git remote add xyz [email protected]

  3. Jetzt können Sie den Inhalt dieser Fernbedienung abrufen, indem Sie

    git fetch xyz

  4. Überprüfen Sie nun den Zweig dieser Fernbedienung durch

    git checkout -b my_copy_random_branch xyz/random_branch

  5. Überprüfen Sie die Branchenliste mit

    git branch -a

Der lokale Zweig my_copy_random_branch verfolgt den Zweig random_branch Ihrer Fernbedienung.

7
zafar142003

Ich möchte Ihnen den Befehl oneliner geben, um alle fernen Zweige zu Ihrem lokalen abzurufen und zu Ihrem gewünschten neu erstellten lokalen Zweig zu wechseln:

git fetch && git checkout discover

nach dem Ausführen von above erhalten Sie die folgende Meldung:

Switched to a new branch 'discover'
Branch discover set up to track remote branch discover from Origin.

in der ersten Zeile steht, dass zu einem neuen Zweig gewechselt ist - warum neu? es ist schon in ferne da !.

Aber eigentlich muss man es auch lokal anlegen, der Zweig wird aus dem entfernten Index genommen und lokal für Sie angelegt.

Hier ist discover ein neuer Zweig, der aus dem entfernten Zweig discover Ihres Repository erstellt wurde.

Aber die zweite Zeile gibt mehr Informationen als die erste, die uns sagen, dass:

unsere Niederlassung ist auf entfernte Niederlassung verfolgen mit dem gleichen Namen eingestellt.

Obwohl git fetchholt alle Zweige zu local. Wenn Sie danach git branch ausführen, sehen Sie nur den Zweig master in local warum?

denn für jeden Zweig, den Sie in Remote haben, müssen Sie ihn auch lokal erstellen, um ihn wie im obigen Beispiel als git checkout <branchname> zu verfolgen.

nachdem Sie den Befehl git checkout ausgeführt haben, können Sie git branch ausführen. Jetzt können Sie beide Zweige sehen:

  1. master und 2. entdecken Sie in Ihrem lokalen Eintrag.
6
Haritsinh Gohil

versuche es einfach

$ git pull Ursprung dein_Zweigname

6
Rizo

git fetch && git checkout <your friend's branch name> sollte den Trick machen

6
tambakoo

Die Schritte sind wie folgt;

  1. git fetch Origin oder git fetch --all, dies ruft alle entfernten Zweige zu Ihrem lokalen Zweig ab und dies ist dann die zweite Option, mit der Sie vorgehen können.

  2. git checkout --track Origin/<The_remote_branch you want to switch over>

Bearbeiten Sie dann diesen Zweig, und Sie können überprüfen, ob Sie sich in diesem Zweig befinden, indem Sie Folgendes eingeben

git branch

Es zeigt den Zweig an, in dem Sie sich gerade befinden.

3
Sam

Wenn Sie Ihren entfernten Zweig schon so kennen ...

git remote
=> One
=> Two

und Sie kennen den Filialnamen, den Sie auschecken möchten. br1.2.3.4 dann mache

git fetch One
=> returns all meta data of remote i.e. the branch name in question.

alles, was übrig bleibt, ist das Auschecken in der Filiale

git checkout br.1.2.3.4

Dann mache neue Zweige daraus.

3
SoEzPz

wenn Sie alle entfernten Zweigstellen abrufen möchten, geben Sie einfach Folgendes ein

git fetch --all

Hoffe, es wird jemand anderem helfen, alle entfernten Zweige zu sehen.

3
Ishwor Khanal

Überprüfen Sie Ihren .git/config, insbesondere, welche Verfolgung auf Abruf für diese Fernbedienung vorhanden ist.

[remote "randomRemote"]
    url = [email protected]:someUser/someRepo.git
    fetch = +refs/heads/*:refs/remotes/randomRemote/*

Wenn heads/* auf randomRemote/* zeigt, werden beim Ausführen von git fetch randomRemote alle Zweige abgerufen. Dann können Sie diesen Zweig einfach auschecken.

Andernfalls,

  1. Sie müssen mit dieser Option Remote-Zweige zum Tracking hinzufügen. Überprüfen Sie danach Ihren .git/config. Du wirst verstehen. git remote set-branches --add randomRemote randomBranch

  2. Führen Sie git fetch randomRemote aus. Dadurch wird der Remote-Zweig abgerufen.

  3. Jetzt können Sie git checkout randomBranch ausführen

2
Vamshi Suram

Wenn Sie ein Repository haben, das mit --depth 1 geklont wurde, funktionieren viele der aufgeführten Befehle nicht. Zum Beispiel hier

% git clone --depth 1 https://github.com/repo/code
Cloning into 'code'...
cd code
remote: Counting objects: 1778, done.
remote: Compressing objects: 100% (1105/1105), done.
remote: Total 1778 (delta 87), reused 1390 (delta 58), pack-reused 0
Receiving objects: 100% (1778/1778), 5.54 MiB | 4.33 MiB/s, done.
Resolving deltas: 100% (87/87), done.
Checking connectivity... done.
Checking out files: 100% (1215/1215), done.
% cd code
% git checkout other_branch
error: pathspec 'other_branch' did not match any file(s) known to git.
% git fetch Origin other_branch
remote: Counting objects: 47289, done.
remote: Compressing objects: 100% (15906/15906), done.
remote: Total 47289 (delta 30151), reused 46699 (delta 29570), pack-reused 0
Receiving objects: 100% (47289/47289), 31.03 MiB | 5.70 MiB/s, done.
Resolving deltas: 100% (30151/30151), completed with 362 local objects.
From https://github.com/repo/code
 * branch            other_branch-> FETCH_HEAD
% git checkout other_branch
error: pathspec 'other_branch' did not match any file(s) known to git.
%

In diesem Fall würde ich das Repo neu klonen, aber vielleicht gibt es andere Techniken, z. git shallow clone (klon - tiefe) vermisst entfernte Äste

2
Colin D

git branch <name> --track Origin/<name>

1
Chris F Carroll

Sie verwenden "Git Pull", um Ihre Zweige getrennt zu halten. Ich werde aktuelle Repo- und Branch-Namen verwenden, um zu helfen, da 'lbranch' und 'rbranch' schwer zu entziffern sind.

Verwenden wir:

  • myteam.unfuddle.com = der entfernte Git-Server
    • tlc = Projektkonto auflösen, auf dem das Repo existiert
    • daves_branch = Name der entfernten Niederlassung

      Sie oder ein Kollege können dies ausführen, um nur Ihren Zweig zu ziehen, unabhängig von der Anzahl der Zweige:

       git init 
       git pull [email protected]: myteam/tlc daves_branch: refs/remotes/Origin/daves_branch 
      
  • 1
    Andrew

    Mit dem einfachen Befehl "git checkout remote_branch_name" können Sie eine lokale Verzweigung erstellen, die alle Änderungen in der entfernten Verzweigung enthält.

    0
    SjK