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.
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
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 fetch
git 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.
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.
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'
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.
Der Titel und die Frage sind verwechselt:
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'
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)
Mit diesem einfachen Befehl:
git checkout -b 'your_branch' Origin/'remote branch'
Der einfachste Weg, zumindest für mich:
git fetch Origin <branchName>
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'
Sie können den entfernten Zweig auch auf einmal abrufen und auschecken:
git fetch && git checkout the-branch-name
git fetch
git branch -r
git checkout <branch_name>
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>'
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.
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.
git fetch --all & git checkout <branch name>
Nehmen wir an, Ihre Fernbedienung ist [email protected] und Sie möchten den Zweig random_branch. Der Prozess sollte wie folgt sein:
Überprüfen Sie zuerst die Liste Ihrer Fernbedienungen durch
git remote -v
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]
git fetch xyz
git checkout -b my_copy_random_branch xyz/random_branch
git branch -a
Der lokale Zweig my_copy_random_branch verfolgt den Zweig random_branch Ihrer Fernbedienung.
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 fetch
holt 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:
versuche es einfach
$ git pull Ursprung dein_Zweigname
git fetch && git checkout <your friend's branch name>
sollte den Trick machen
Die Schritte sind wie folgt;
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.
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.
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.
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.
Ü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,
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
Führen Sie git fetch randomRemote
aus. Dadurch wird der Remote-Zweig abgerufen.
Jetzt können Sie git checkout randomBranch
ausführen
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
git branch <name> --track Origin/<name>
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:
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
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.