Jemand hat einen Zweig namens test
mit git Push Origin test
in ein freigegebenes Repository verschoben. Ich kann den Zweig mit git branch -r
sehen.
Jetzt versuche ich, den Remote-Zweig test
zu überprüfen.
Ich habe es versucht:
git checkout test
was nichts tut
git checkout Origin/test
gibt * (no branch)
. Welches ist verwirrend. Wie kann ich auf "no branch" sein?
Wie überprüfe ich einen entfernten Git-Zweig?
Jakubs Antwort verbessert dies tatsächlich. Mit Git-Versionen ≥ 1.6.6 können Sie mit nur einer Fernbedienung Folgendes tun:
git fetch
git checkout test
Wie Benutzer masukomi in einem Kommentar betont, funktioniert git checkout test
in modernen Git NICHT, wenn Sie mehrere Fernbedienungen haben. In diesem Fall verwenden
git checkout -b test <name of remote>/test
oder die Kurzschrift
git checkout -t <name of remote>/test
Bevor Sie lokal an einem Remote-Zweig arbeiten können, müssen Sie ihn wie in den folgenden Antworten beschrieben abrufen.
Um eine Filiale abzurufen, müssen Sie lediglich:
git fetch Origin
Dadurch werden alle Remote-Zweige für Sie abgerufen. Sie können die Filialen anzeigen, die zum Auschecken zur Verfügung stehen:
git branch -v -a
Mit den entfernten Zweigen in der Hand müssen Sie nun den Zweig auschecken, an dem Sie interessiert sind, und Ihnen eine lokale Arbeitskopie geben:
git checkout -b test Origin/test
Nebenbemerkung: Mit modernem Git (> = 1.6.6 ), Sie können nur verwenden
git checkout test
(Beachten Sie, dass es sich um 'Test' und nicht um 'Origin/Test' handelt.) Führen Sie magische DWIM - Aktionen aus, und erstellen Sie für Sie einen 'Test' für den lokalen Zweig, für den der Upstream ein Remote-Tracking-Zweig wäre. ' Herkunft/Test '.
Die Ausgabe * (no branch)
in git branch
bedeutet, dass Sie sich in einem unbenannten Zweig befinden, der sich im Status "Detached HEAD" befindet (HEAD zeigt direkt auf Commit und ist kein symbolischer Verweis auf einen lokalen Zweig). Wenn Sie einige Festschreibungen für diesen unbenannten Zweig vorgenommen haben, können Sie immer einen lokalen Zweig außerhalb des aktuellen Festschreibens erstellen:
git checkout -b test HEAD
In diesem Fall möchten Sie wahrscheinlich einen lokalen Zweig test
erstellen, der den fernen Zweig test
verfolgt:
$ git branch test Origin/test
In früheren Versionen von git
haben Sie eine explizite --track
-Option benötigt. Dies ist jetzt die Standardeinstellung, wenn Sie von einem Remote-Zweig abzweigen.
Während die erste und ausgewählte Antwort technisch korrekt ist , besteht die Möglichkeit, dass Sie noch nicht alle Objekte und Verweise aus dem Remote-Repository abgerufen haben. In diesem Fall erhalten Sie folgende Fehlermeldung:
$ git checkout -b remote_branch Origin/remote_branch
fatal: git checkout: Das Aktualisieren von Pfaden ist mit dem Wechseln von Zweigen nicht kompatibel.
Wollten Sie 'Origin/remote_branch' auschecken, das nicht als Commit aufgelöst werden kann?
Wenn Sie diese Nachricht erhalten, müssen Sie zuerst einen git fetch Origin
ausführen, wobei Origin
der Name des Remote-Repositorys ist, bevor Sie git checkout remote_branch
ausführen. Hier ist ein vollständiges Beispiel mit Antworten:
$ git fetch Origin
remote: Counting objects: 140, done.
remote: Compressing objects: 100% (30/30), done.
remote: Total 69 (delta 36), reused 66 (delta 33)
Unpacking objects: 100% (69/69), done.
From https://github.com/githubuser/repo-name
e6ef1e0..5029161 develop -> Origin/develop
* [new branch] demo -> Origin/demo
d80f8d7..359eab0 master -> Origin/master
$ git checkout demo
Branch demo set up to track remote branch demo from Origin.
Switched to a new branch 'demo'
Wie Sie sehen, wurden durch Ausführen von git fetch Origin
alle Remote-Zweige abgerufen, die wir noch nicht für die Verfolgung auf unserem lokalen Computer eingerichtet hatten. Von dort aus können wir einfach git checkout remote_branch
ausführen, da wir jetzt einen Verweis auf den Remote-Zweig haben, und wir werden die Vorteile der Remote-Verfolgung nutzen.
Ich habe die obige Lösung ausprobiert, aber es hat nicht funktioniert. Versuchen Sie dies, es funktioniert:
git fetch Origin 'remote_branch':'local_branch_name'
Dadurch wird der entfernte Zweig abgerufen und ein neuer lokaler Zweig (falls noch nicht vorhanden) mit dem Namen local_branch_name
erstellt, in dem der entfernte Zweig nachverfolgt wird.
Dies wird DWIM für eine Fernbedienung ohne Namen Origin ( documentation ):
$ git checkout -t remote_name/remote_branch
Um eine neue Fernbedienung hinzuzufügen, müssen Sie zunächst folgende Schritte ausführen:
$ git remote add remote_name location_of_remote
$ git fetch remote_name
Der erste teilt Git mit, dass die Fernbedienung existiert, der zweite erhält die Commits.
Verwenden:
git checkout -b <BRANCH-NAME> <REMOTE-NAME>/<BRANCH-NAME>
Andere Antworten funktionieren in meinem gutartigen Fall nicht mit modernem Git. Möglicherweise müssen Sie zuerst ziehen, wenn der Remote-Zweig neu ist, aber ich habe diesen Fall nicht überprüft.
OK, die Antwort ist einfach ... Sie sehen im Grunde den Zweig, aber Sie haben noch keine lokale Kopie! ...
Sie müssen fetch
den Zweig ...
Sie können den Zweig einfach abrufen und dann auschecken. Verwenden Sie dazu den folgenden einzeiligen Befehl:
git fetch && git checkout test
Ich habe auch das folgende Bild erstellt, damit Sie die Unterschiede teilen können. Schauen Sie sich an, wie fetch
funktioniert und wie es sich von pull
unterscheidet:
So klonen Sie ein Git-Repository:
git clone <either ssh url /http url>
Der obige Befehl checkt alle Zweige aus, aber nur der Zweig master
wird initialisiert. Wenn Sie die anderen Filialen auschecken möchten, gehen Sie wie folgt vor:
git checkout -t Origin/future_branch (for example)
Mit diesem Befehl wird der Remote-Zweig ausgecheckt, und der Name Ihres lokalen Zweigs ist mit dem Namen des Remote-Zweigs identisch.
Wenn Sie Ihren lokalen Filialnamen an der Kasse überschreiben möchten:
git checkout -t -b enhancement Origin/future_branch
Jetzt lautet Ihr lokaler Filialname enhancement
, aber Ihr entfernter Filialname lautet future_branch
.
Du kannst es versuchen
git fetch remote
git checkout --track -b local_branch_name Origin/branch_name
oder
git fetch
git checkout -b local_branch_name Origin/branch_name
Zunächst müssen Sie Folgendes tun:
git fetch
# Wenn Sie den Filialnamen nicht kennen
git fetch Origin branch_name
Zweitens können Sie die Remote-Verzweigung in Ihre lokale überprüfen, indem Sie:
git checkout -b branch_name Origin/branch_name
-b
erstellt einen neuen Zweig im angegebenen Namen von Ihrem ausgewählten entfernten Zweig.
Befehle
git fetch --all
git checkout -b <ur_new_local_branch_name> Origin/<Remote_Branch_Name>
sind gleich
git fetch --all
und dann
git checkout -b fixes_for_dev Origin/development
Beide erzeugen einen latest fixes_for_dev
aus development
Ich benutze den folgenden Befehl:
git checkout --track Origin/other_remote_branch
Wenn sich der Zweig auf einer anderen als der Origin
-Remote befindet, möchte ich Folgendes tun:
$ git fetch
$ git checkout -b second/next upstream/next
Dadurch wird der Zweig next
auf dem upstream
Remote-Eingang in einen lokalen Zweig mit dem Namen second/next
ausgecheckt. Das heißt, wenn Sie bereits einen lokalen Zweig mit dem Namen next haben, tritt kein Konflikt auf.
$ git branch -a
* second/next
remotes/Origin/next
remotes/upstream/next
keine dieser Antworten hat für mich funktioniert. das hat funktioniert:
git checkout -b feature/branch remotes/Origin/feature/branch
git branch -r
gibt an, dass der Objektname ungültig ist, da dieser Zweigname nicht in der lokalen Zweigliste von Git enthalten ist. Aktualisieren Sie Ihre lokale Branchenliste von Origin mit:
git remote update
Versuchen Sie dann erneut, Ihren Remote-Zweig auszulesen.
Das hat bei mir funktioniert.
Ich glaube, git fetch
zieht alle entfernte Zweige ein, was das ursprüngliche Poster nicht wollte.
git fetch && git checkout your-branch-name
Ich war in einer Situation festgefahren, als ich error: pathspec 'desired-branch' did not match any file(s) known to git.
für alle obigen Vorschläge sah. Ich bin auf Git-Version 1.8.3.1.
Also das hat bei mir funktioniert:
git fetch Origin desired-branch
git checkout -b desired-branch FETCH_HEAD
Die Erklärung dahinter ist, dass mir aufgefallen ist, dass der entfernte Zweig beim Abrufen nach FETCH_HEAD abgerufen wurde:
$ git fetch Origin desired-branch
From github.com:MYTEAM/my-repo
* branch desired-branch -> FETCH_HEAD
Führen Sie einfach _git checkout
_ mit dem Namen des Remote-Zweigs aus. Git wird automatisch erstellen einen lokalen Zweig, der den entfernten Zweig verfolgt:
_git fetch
git checkout test
_
Wenn dieser Filialname jedoch in mehreren Remote-Computern vorhanden ist, funktioniert dies nicht, da Git nicht weiß, welchen er verwenden soll. In diesem Fall können Sie entweder:
_git checkout --track Origin/test
_
oder
_git checkout -b test Origin/test
_
In 2.19 lernte Git die checkout.defaultRemote
-Konfiguration, die eine Fernbedienung angibt, die standardmäßig verwendet wird, wenn eine solche Mehrdeutigkeit behoben wird.
Der Befehl git remote show <Origin name>
listet alle Zweige auf (einschließlich nicht verfolgter Zweige). Dann können Sie den Namen des entfernten Zweigs finden, den Sie abrufen müssen.
Beispiel:
$ git remote show Origin
Gehen Sie folgendermaßen vor, um entfernte Zweige abzurufen:
git fetch <Origin name> <remote branch name>:<local branch name>
git checkout <local branch name > (local branch name should the name that you given fetching)
Beispiel:
$ git fetch Origin test:test
$ git checkout test
Andere Jungs und Mädels geben die Lösungen, aber vielleicht kann ich dir sagen warum.
git-Checkout-Test, der nichts tut
Does nothing
ist nicht gleich doesn't work
, also schätze ich, wenn Sie in Ihr Terminal 'git checkout test' eingeben und die Eingabetaste drücken, wird keine Meldung angezeigt und es tritt kein Fehler auf. Habe ich recht?
Wenn die Antwort "Ja" lautet, kann ich Ihnen die Ursache nennen.
Die Ursache ist, dass sich in Ihrem Arbeitsbaum eine Datei (oder ein Ordner) mit dem Namen 'test' befindet.
Wenn git checkout xxx
analysiert,
xxx
zunächst als einen Zweignamen, aber es gibt keinen Zweig namens test.xxx
ein Pfad ist, und zum Glück (oder leider) gibt es eine Datei namens test. So bedeutet git checkout xxx
, dass alle Änderungen in der xxx
-Datei verworfen werden.xxx
gibt, versucht Git, die xxx
nach bestimmten Regeln zu erstellen. Eine der Regeln ist das Erstellen eines Zweigs mit dem Namen xxx
, wenn remotes/Origin/xxx
vorhanden ist.m neu erstellte Zweige zu erhalten
git fetch
m in einen anderen Zweig zu wechseln
git checkout BranchName
Sie können mit dem folgenden Bash-Skript alle Remote-Zweige verfolgen:
#!/bin/bash
git fetch --all
for branch in `git branch -r --format="%(refname:short)" | sed 's/Origin\///'`
do git branch -f --track "$branch" "Origin/$branch"
done
Hier ist auch eine einzeilige Version:
git fetch --all; for branch in `git branch -r --format="%(refname:short)" | sed 's/Origin\///'`; do git branch --track "$branch" "Origin/$branch" ; done ;
Holen Sie sich von der Fernbedienung und überprüfen Sie den Zweig.
git fetch <remote_name> && git checkout <branch_name>
Z.B.:
git fetch Origin && git Checkout-Funktion/XYZ-1234-Add-Warnungen
Verwenden Sie fetch
, um alle Ihre Fernbedienung zu ziehen
git fetch --all
So listen Sie entfernte Zweige auf:
git branch -r
Um alle Ihre Filialen aufzulisten
git branch -l
>>outpots like-
* develop
test
master
So checken Sie einen Zweig aus/ändern ihn
git checkout master
Wenn der Name des entfernten Zweigs mit Sonderzeichen beginnt, müssen Sie ihn im Checkout-Befehl in einfache Anführungszeichen setzen, da git sonst nicht weiß, um welchen Zweig es sich handelt.
Ich habe zum Beispiel versucht, einen entfernten Zweig mit dem Namen #9773
auszuchecken, aber der Befehl hat nicht richtig funktioniert, wie in der folgenden Abbildung gezeigt:
Aus irgendeinem Grund habe ich mich gefragt, ob das scharfe Symbol (#) etwas damit zu tun haben könnte, und dann habe ich versucht, den Zweignamen in einfache Anführungszeichen zu setzen, z. B. '#9773'
anstatt nur #9773
, und es hat funktioniert fein.
$ git checkout -b '#9773' Origin/'#9773'
Bitte folgen Sie dem Befehl, um einen leeren Ordner zu erstellen. Gib das ein und benutze diesen Befehl:
saifurs-Mini:YO-iOS saifurrahman$ git clone your_project_url
Cloning into 'iPhoneV1'...
remote: Counting objects: 34230, done.
remote: Compressing objects: 100% (24028/24028), done.
remote: Total 34230 (delta 22212), reused 15340 (delta 9324)
Receiving objects: 100% (34230/34230), 202.53 MiB | 294.00 KiB/s, done.
Resolving deltas: 100% (22212/22212), done.
Checking connectivity... done.
saifurs-Mini:YO-iOS saifurrahman$ cd iPhoneV1/
saifurs-Mini:iPhoneV1 saifurrahman$ git checkout 1_4_0_content_discovery
Branch 1_4_0_content_discovery set up to track remote branch 1_4_0_content_discovery from Origin.
Switched to a new branch '1_4_0_content_discovery'