Verwirrende Fehlermeldung von git

90

Ich habe diese Nachricht von Git erhalten:

Sie haben gefragt, ob Sie vom Remote-Ursprung abrufen möchten, haben jedoch keinen Zweig angegeben. Da dies nicht die standardmäßig konfigurierte Fernbedienung für Ihren aktuellen Zweig ist, müssen Sie einen Zweig in der Befehlszeile angeben.

Kann es jemand erklären? und wichtiger, wie man es behebt?

Cinek
quelle

Antworten:

89

Sie müssen git mitteilen, welchen Zweig Sie aus den Remote-Repos "origin" ziehen möchten.

Ich denke, Sie möchten den Standardzweig (Master), git pull origin masterum Ihr Problem zu beheben.

Sehen Sie git help branch, git help pullund git help fetch für weitere Informationen.

p4bl0
quelle
2
Damit es funktioniert, musste ich den "Master" -Zweig auschecken (es wurde kein Zweig ausgewählt) und ziehen, wodurch das Problem behoben wurde.
Cinek
@cinek: Ja, git pullzieht und verschmilzt mit dem aktuellen Zweig, sodass sein Verhalten vollständig davon abhängt, welcher Zweig ausgecheckt ist. Bei einem getrennten HEAD (kein Zweig ausgecheckt) kann er nicht wissen, welcher Zweig gezogen werden soll.
Cascabel
@cinek: Ich nahm an, dass du neu in Git bist, also gebe ich zu, dass du auf dem Branch Master in einem völlig normalen Zustand warst, mein schlechtes :-).
p4bl0
86

Um dies zu beheben, setzen Sie voraus, dass Sie sich auf dem masterZweig befinden und den masterZweig von der originFernbedienung abrufen möchten , und zwar in ausreichend neuen Git-Versionen (1.8 oder neuer):

git branch -u origin/master master

(Analog für andere Zweige und / oder Fernbedienungen.)

Wenn Sie dies mit einem Push kombinieren können, ist es noch kürzer:

git push -u origin master

Danach wird eine Ebene git pull/ git pushtun, was Sie erwarten.


Während der Git 1.7-Serie gab git branches keinen -uSchalter (nur git push), stattdessen musste man den viel längeren verwenden --set-upstream:

git branch --set-upstream master origin/master

Beachten Sie die Umkehrung der Argumente im Vergleich zu -u. Ich habe diese Bestellung mehr als einmal gefummelt.


All dies sind übrigens Abkürzungen für Folgendes, was Sie noch explizit tun können:

git config branch.master.remote origin
git config branch.master.merge refs/heads/master

Vor 1.7 mussten Sie dies so tun.

Aristoteles Pagaltzis
quelle
Ich denke, dass der Befehl oben (zumindest in meiner Version von Git) den Upstream eines Zweigs namens "origin" auf "origin / master" setzt. Wenn Ihre Niederlassung vor Ort "Master" heißt, würden Sie wahrscheinlich wollen:git branch --set-upstream master origin/master
Evan Donovan
Interessanterweise ist die -uOption git branchin meiner Version 1.8.5.3 nicht dokumentiert, was Ihre Dokumentation hier noch wichtiger macht. Und wie Sie bemerken, war die Option in Version 1.7 nicht verfügbar. *. Da -ukurz ist --set-upstream, sollte nicht die Reihenfolge der Argumente umgekehrt werden , wie sie tat --set-upstreamaufgrund @ EvanDonovan Kommentar?
Kochfelder
Wenn ich jedoch den von Ihnen gezeigten Befehl ( git branch -u origin/master master) verwende, funktioniert er wie erwartet / beabsichtigt für mich: "Zweigstellenmaster eingerichtet, um den Remote-Zweigstellenmaster vom Ursprung aus zu verfolgen."
Kochfelder
1
@hobs: das ist eigentlich eine perversität von git. Der -uSchalter ist eigentlich nicht die Kurzform von --set-upstream. Die Reihenfolge der Argumente ist effektiv umgekehrt zu der Reihenfolge für --set-upstream. Ich denke, es war erst später, dass --set-upstream-to(beachten Sie das "-to") eingeführt wurde, was -ujetzt eigentlich die Kurzform von ist.
Aristoteles Pagaltzis
Beeindruckend! In der Tat verwirrend. Danke, dass du das für mich entwirrt hast.
Kochfelder
3

Nachricht sagt genau, worum es geht. Ihr aktueller Zweig ist keinem Zweig im Ursprung zugeordnet (verfolgt ihn nicht) . Also weiß Git nicht, was er ziehen soll.

Was ist zu tun? Kommt darauf an...

In den meisten Fällen arbeiten Sie an einem lokalen Zweig xyz, der vom Master verzweigt ist, der vom Master des Ursprungs geklont wurde . Der übliche Weg, dies zu beheben, besteht darin, zu Master zu wechseln und zu ziehen, um es mit dem Ursprung zu synchronisieren, und dann zu xyz und zurückzukehren rebase master.

Aber in Ihrer Situation möchten Sie vielleicht etwas anderes tun. Wir können es nicht wissen, ohne die Details Ihrer Filialen und Fernbedienungen zu kennen und wie Sie sie verwenden möchten.

Tomek Szpakowicz
quelle