Git-Checkout: Das Aktualisieren von Pfaden ist nicht mit dem Wechseln von Zweigen kompatibel

467

Mein Problem hängt mit einem schwerwiegenden Git-Fehler beim Wechseln des Zweigs zusammen .

Ich versuche mit dem Befehl einen Remote-Zweig abzurufen

git checkout -b local-name origin/remote-name

aber ich bekomme diese Fehlermeldung:

fatal: git checkout: Das Aktualisieren von Pfaden ist nicht mit dem Wechseln von Zweigen kompatibel.
Wollten Sie 'origin / remote-name' auschecken, was nicht als Commit aufgelöst werden kann?

Wenn ich manuell einen Zweig erstelle und dann den Remote-Zweig ziehe, funktioniert dies genauso wie das Erstellen eines neuen Klons und das Auschecken des Zweigs.

Warum funktioniert es nicht in dem Repository, mit dem ich arbeite?

Ikke
quelle
1
Was hat sich seit der ersten Instanz dieses Befehls geändert (Auslösen der Fehlermeldung)?
VonC
git init git fetch git fetch git: //blabla.com/dir1/Project.git

Antworten:

739

Ich glaube, dies tritt auf, wenn Sie versuchen, einen Remote-Zweig auszuchecken, den Ihr lokales Git-Repo noch nicht kennt. Versuchen:

git remote show origin

Wenn sich der Remote-Zweig, den Sie auschecken möchten, unter "Neue Remote-Zweige" und nicht unter "Verfolgte Remote-Zweige" befindet, müssen Sie diese zuerst abrufen:

git remote update
git fetch

Jetzt sollte es funktionieren:

git checkout -b local-name origin/remote-name
user167628
quelle
7
Dies löste das Problem für mich, nicht die obige willkürliche Antwort.
Jessedc
21
Das sollte "git fetch REPOSITORY_NAME" sein, um alle Zweige in diesem Repository abzurufen.
Mike Thomsen
1
nicht unbedingt. git fetcherhält alle Zweige von allen entfernten Repos.
Michael Grinich
4
Für den Fall, dass jemand anderes mit der völligen Verrücktheit all dessen zu kämpfen hat: git fetch origin / branchname Ist nicht dasselbe wie git fetch. Ersteres führt einfach dazu, dass "neu (nächster Abruf wird in Fernbedienungen / Ursprung gespeichert)" in einer Spalte angezeigt wird, die über git remote show origin sichtbar ist.
Alexander Kellett
7
Wenn Sie versuchen, dies für eine Fernbedienung zu tun, die Sie explizit hinzugefügt haben (also alles andere als Ursprung ), müssen Sie dies tun, git remote updatebevor Ihr Abruf diese Fernbedienung abruft. Andernfalls erhalten Sie Nachrichten wie Did you intend to checkout 'upstream-repo/master' which can not be resolved as commit?Bitte fügen Sie diese zur Antwort hinzu und sparen Sie den Leuten Stunden beim Lesen derselben Antworten, die nur für den Ursprung funktionieren.
Bruno Bronosky
150

Alternative Syntax,

git fetch origin remote_branch_name:local_branch_name
Seltene Vergnügen
quelle
12
Das hat bei mir funktioniert. Der Name meines Remote-Zweigs ist kein Ursprung. Ich weiß nicht, ob das einen Unterschied macht, da ich Wodka getrunken habe.
Rimian
13
Dies ist nicht nur eine alternative Syntax, sondern kann funktionieren, wenn git checkout -b branch_name origin / branch_name nicht funktioniert
codercake
1
Dies hat auch mein Problem behoben, als "git checkout --track origin / remote-branch" ausgeführt wurde, das ursprünglich den gleichen Fehler wie OPs vor dem Fix gab. Vielen Dank!
Kakyo
1
Arbeitete für mich nach dem Ausführen auch die validierte Antwort.
AsTeR
2
Ja, ich vermute, dass hier das --depthQualifikationsmerkmal für den ursprünglichen Klon fehlerhaft ist. Ich hatte Erfolg mit, git fetch remote_branch_name:local_branch_nameaber alle anderen Ratschläge scheiterten.
John Kelleher
46

Nachdem ich das meiste, was ich in diesem Thread lesen konnte, ohne Erfolg ausprobiert hatte, stieß ich auf diesen: Remote-Zweig, der nicht in "git branch -r" angezeigt wird

Es stellte sich heraus, dass meine .git / config-Datei falsch war. Nach einer einfachen Korrektur wurden alle Zweige angezeigt.

Gehen von

[remote "origin"]
    url = http://stash.server.com/scm/EX/project.git
    fetch = +refs/heads/master:refs/remotes/origin/master

zu

[remote "origin"]
    url = http://stash.server.com/scm/EX/project.git
    fetch = +refs/heads/*:refs/remotes/origin/*

Hat den Trick gemacht

PålOliver
quelle
4
Das ist in der Tat eine seltsame Konfiguration. Es weist git an, nur den Hauptzweig von der Fernbedienung abzurufen.
Ikke
3
Ich würde es 10 Mal abstimmen, wenn ich könnte! - Dies scheint etwas zu sein, was der neue Git beim Klonen tut
mpapis
2
Ich hatte das gleiche Problem, es machte mich verrückt. Wenn Sie keine entfernten Filialen sehen, überprüfen Sie dies bitte !!
Carlos Granados
Gott sei Dank für Ihre Antwort :)
Sacha
Geist = geblasen! Vielen Dank!
Chiranjib
12

Sie sind sich nicht sicher, ob dies hilfreich oder für Ihre Frage genau relevant ist. Wenn Sie jedoch versuchen, nur einen einzelnen Zweig aus dem Remote-Repository abzurufen und auszuchecken , reichen die folgenden git-Befehle aus:

url= << URL TO REPOSITORY >>
branch= << BRANCH NAME >>

git init
git remote add origin $url
git fetch origin $branch:origin/$branch
git checkout -b $branch --track origin/$branch
VirtualStaticVoid
quelle
11

Keines der oben genannten hat bei mir funktioniert. Meine Situation ist etwas anders, mein Remote-Zweig ist nicht am Ursprung . aber in einem anderen Repository.

git remote add remoterepo GIT_URL.git
git fetch remoterepo
git checkout -b branchname remoterepo/branchname

Tipp: Wenn Sie den Remote-Zweig in der folgenden Ausgabe nicht sehen, können Sie ihn nicht git branch -v -aauschecken.

Bestätigte Arbeit am 1.7.5.4

Olivier Refalo
quelle
Arf, stellen Sie einfach fest, dass VirtualStaticVoid die gleiche Lösung hatte!
Olivier Refalo
+1 für git branch -v -a: Ich hatte eine falsch konfigurierte Fernbedienung, die angab fetch = +refs/heads/*:refs/remotes/master/*, obwohl die Fernbedienung aufgerufen wurde upstream.
Keflavich
7

Für mich hat funktioniert:

git fetch

Dadurch werden alle Refs für alle Zweige auf der Fernbedienung auf Ihre Maschine übertragen. Dann könnte ich tun

git checkout <branchname>

und das hat perfekt funktioniert. Ähnlich wie die Antwort mit der höchsten Abstimmung, aber etwas einfacher.

Matt
quelle
4

Ich vermute, dass es keinen Remote-Zweig mit dem Namen remote-name gibt, aber dass Sie versehentlich einen lokalen Zweig mit dem Namen origin / remote-name erstellt haben.

Ist es möglich, dass Sie irgendwann getippt haben:

git branch origin / remote-name

So erstellen Sie einen lokalen Zweig mit dem Namen origin / remote-name? Geben Sie diesen Befehl ein:

git checkout origin / remote-name

Sie werden entweder sehen:

In Zweig "Ursprung / Remote-Name" gewechselt

was bedeutet, dass es sich wirklich um eine falsch benannte lokale Niederlassung handelt, oder

Hinweis: Wechseln Sie zu "origin / rework-isscoring", bei dem es sich nicht um einen lokalen Zweig handelt
Wenn Sie an dieser Kasse einen neuen Zweig erstellen möchten, können Sie dies tun
(jetzt oder später) durch erneutes Verwenden von -b mit dem Befehl checkout. Beispiel:
  Git Checkout -b 

was bedeutet, dass es wirklich eine entfernte Niederlassung ist.

Don Branson
quelle
3

Es ist nicht sehr intuitiv, aber das funktioniert gut für mich ...

  mkdir remote.git & cd remote.git & git init
  git remote add origin $REPO
  git fetch origin $BRANCH:refs/remotes/origin/$BRANCH        

DANN führen Sie den Befehl git branch --track aus ...

  git branch --track $BRANCH origin/$BRANCH
Eddie B.
quelle
2

Für mich hatte ich einen Tippfehler und mein Remote-Zweig existierte nicht

Verwenden Sie git branch -adiese Option, um entfernte Zweige aufzulisten

Thomas
quelle
1

Könnte Ihr Problem mit dieser anderen SO-Frage "Checkout-Problem" verknüpft sein ?

dh: ein Problem im Zusammenhang mit:

  • eine alte Version von Git
  • Eine merkwürdige Checkout-Syntax, die lauten sollte: git checkout -b [<new_branch>] [<start_point>]mit [<start_point>]dem Namen eines Commits, bei dem der neue Zweig gestartet werden soll, und das 'origin/remote-name'ist es nicht.
    (wohingegen git branchein start_point der Name eines Remote-Zweigs ist)

Hinweis: Das Skript checkout.sh lautet:

  if test '' != "$newbranch$force$merge"
  then
    die "git checkout: updating paths is incompatible with switching branches/forcing$hint"
  fi

Es ist, als ob die Syntax git checkout -b [] [remote_branch_name] sowohl den Zweig umbenannte als auch den neuen Startpunkt des neuen Zweigs zurücksetzte, was als inkompatibel angesehen wird.

VonC
quelle
Das Problem ist behoben. Git Checkout -b lokaler Name Remote / Remote-Zweig funktioniert tatsächlich
Ikke
1
Interessant, was hat sich seit der ersten Instanz dieses Befehls geändert (Auslösen der Fehlermeldung)?
VonC
1

Nach zig Malem Abrufen wurden noch hinzugefügte Fernbedienungen nicht angezeigt, obwohl sich die Blobs im Pool befanden. Es stellt sich heraus, dass die Option --tagsgit remote add aus irgendeinem Grund nicht verwendet werden sollte . Sie können es manuell aus der .git / config entfernen, damit git fetch die Refs erstellt.

eMPee584
quelle