befehle - git rebase
Wie checke ich einen entfernten Git-Zweig aus? (18)
Jemand hat einen Zweig namens test
mit git push origin test
in ein gemeinsam genutztes Repository verschoben. Ich kann den Zweig mit git branch -r
.
Jetzt versuche ich, den entfernten Testzweig zu überprüfen.
Ich habe es versucht:
git checkout test
der nichts tutgit checkout origin/test
ergibt* (no branch)
. Welches ist verwirrend. Wie kann ich auf "keine Branche" sein?
Wie checke ich einen entfernten Git-Zweig aus?
Aktualisieren
Jakubs Antwort verbessert dies tatsächlich. Mit Git-Versionen ≥ 1.6.6 und nur einer Fernbedienung können Sie Folgendes tun:
git fetch
git checkout test
Wie der Benutzer masukomi in einem Kommentar darauf hinweist, funktioniert git checkout test
NICHT in modernen Git, wenn Sie mehrere Fernbedienungen haben. In diesem Fall verwenden
git checkout -b test <name of remote>/test
Alte Antwort
Bevor Sie lokal an einem entfernten Zweig arbeiten können, müssen Sie ihn wie in den Antworten unten beschrieben abrufen.
Um einen Zweig abzurufen, müssen Sie einfach:
git fetch origin
Dadurch werden alle entfernten Zweige für Sie abgerufen. Sie können die zur Kasse verfügbaren Filialen sehen mit:
git branch -v -a
Mit den abgelegenen Zweigstellen in der Hand müssen Sie nun die Zweigstelle prüfen, die Sie interessiert, und Ihnen eine lokale Arbeitskopie geben:
git checkout -b test origin/test
Akzeptierte Antwort funktioniert nicht für Sie?
Während die erste und ausgewählte Antwort technisch korrekt ist , besteht die Möglichkeit, dass Sie noch nicht alle Objekte und Referenzen aus dem Remote-Repository abgerufen haben. Wenn dies der Fall ist, erhalten Sie folgende Fehlermeldung:
$ git checkout -b remote_branch origin/remote_branch
fatal: git checkout: Das Aktualisieren von Pfaden ist mit dem Wechseln der Zweige nicht kompatibel.
Haben Sie vor, 'origin / remote_branch' auszuchecken, was nicht als Commit aufgelöst werden kann?
Lösung
Wenn Sie diese Nachricht erhalten, müssen Sie zunächst einen git fetch origin
git checkout remote_branch
wobei origin
der Name des Remote-Repositorys ist, bevor Sie git checkout remote_branch
. 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 beim Ausführen von git fetch origin
alle entfernten Zweige abgerufen, die noch nicht für die Verfolgung auf unserem lokalen Computer eingerichtet waren. Da wir nun einen Verweis auf den Remote-Zweig haben, können Sie git checkout remote_branch
einfach git checkout remote_branch
und die Vorteile des Remote-Tracking nutzen.
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 erstellen einen latest fixes_for_dev
aus der development
Benutzen:
git checkout -b <BRANCH-NAME> <REMOTE-NAME>/<BRANCH-NAME>
Andere Antworten funktionieren mit modernem Git in meinem gutartigen Fall nicht. Möglicherweise müssen Sie zuerst ziehen, wenn der entfernte Zweig neu ist, aber ich habe diesen Fall nicht geprüft.
Dies wird DWIM für einen entfernten, nicht benannten Ursprung ( documentation ) sein:
$ git checkout -t remote_name/remote_branch
Um eine neue Fernbedienung hinzuzufügen, müssen Sie zuerst Folgendes tun:
$ git remote add remote_name location_of_remote
$ git fetch remote_name
Der erste teilt Git mit, dass die Fernbedienung existiert, der zweite bekommt die Commits.
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
Folgen Sie dem Befehl, um einen leeren Ordner zu erstellen. Geben Sie das ein und verwenden Sie 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'
Holen Sie den Ursprung und überprüfen Sie den Zweig.
$ git fetch origin desired-branch
From github.com:MYTEAM/my-repo
* branch desired-branch -> FETCH_HEAD
Ich benutze den folgenden Befehl:
git checkout --track origin/other_remote_branch
Ich habe die obige Lösung ausprobiert, aber es hat nicht funktioniert. Probieren Sie es aus, es funktioniert:
git fetch origin 'remote_branch':'local_branch_name'
Dadurch wird der entfernte Zweig local_branch_name
und ein neuer lokaler Zweig (falls nicht bereits vorhanden) mit dem Namen local_branch_name
und der entfernte Zweig darin verfolgt.
Keine dieser Antworten funktionierte für mich. das hat funktioniert:
git checkout -b feature/branch remotes/origin/feature/branch
Sie können mit dem folgenden Bash-Skript beginnen, alle entfernten Zweige zu 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 ;
Wenn der Name des Remote-Zweigs mit Sonderzeichen beginnt, müssen Sie im Checkout-Befehl einfache Anführungszeichen verwenden, sonst weiß Git nicht, von welchem Zweig Sie sprechen.
Ich habe zum Beispiel versucht, einen entfernten Zweig namens #9773
, der Befehl funktionierte jedoch nicht ordnungsgemäß, wie in der folgenden Abbildung dargestellt:
Aus irgendeinem Grund fragte ich mich, ob das scharfe Symbol (#) etwas damit zu tun haben könnte, und versuchte dann, den Namen des Zweiges mit einfachen Anführungszeichen zu umgeben, wie '#9773'
rathen als nur #9773
, und es funktionierte gut.
$ git checkout -b '#9773' origin/'#9773'
Wenn sich der Zweig auf einer anderen als der origin
Fernbedienung befindet, mache ich gerne Folgendes:
$ git fetch
$ git checkout -b second/next upstream/next
Dadurch wird der next
Zweig in der upstream
entfernten Station in einen lokalen Zweig mit dem Namen " second/next
. Das heißt, wenn Sie bereits einen lokalen Zweig als nächsten haben, wird es keinen Konflikt geben.
$ git branch -a
* second/next
remotes/origin/next
remotes/upstream/next
git branch -r
sagt, dass der Objektname ungültig ist, da dieser Zweigname nicht in der lokalen Zweigliste von Git enthalten ist. Aktualisieren Sie Ihre lokale Zweigstellenliste mit:
git remote update
Versuchen Sie dann erneut, Ihren Remote-Zweig auszuchecken.
Das hat bei mir funktioniert.
Ich glaube, git fetch
zieht in alle abgelegenen Zweige, was das ursprüngliche Poster nicht wollte.
git fetch && git checkout your-branch-name
OK , die Antwort ist einfach ... Sie sehen im Grunde den Zweig, aber Sie haben noch keine lokale Kopie! ...
Sie müssen den Zweig fetch
...
Sie können einfach den Zweig abrufen und dann auschecken. Verwenden Sie dazu den einzeiligen Befehl:
git fetch && git checkout test
Ich habe auch das folgende Bild für Sie erstellt, um die Unterschiede zu teilen und zu sehen, wie fetch
funktioniert und wie es sich unterscheidet:
Um neu erstellte Zweige zu erhalten
git fetch
In einen anderen Zweig wechseln
git checkout BranchName