Messaggio di errore confuso da git


90

Ho ricevuto questo messaggio da Git:

Hai chiesto di eseguire il pull dalla "origine" remota, ma non hai specificato un ramo. Poiché questo non è il telecomando configurato per impostazione predefinita per il ramo corrente, è necessario specificare un ramo sulla riga di comando.

Qualcuno può spiegarlo? e più importante come risolverlo?

Risposte:


89

Devi dire a git quale ramo vuoi estrarre dai repository remoti "origin".

Immagino che tu voglia il ramo predefinito (master), quindi git pull origin masterdovresti risolvere il tuo problema.

Vedi git help branch, git help pulle git help fetch per maggiori informazioni.


2
per farlo funzionare ho dovuto controllare il ramo "master" (non c'era nessun ramo selezionato) e tirare, che ha risolto il problema.
cinek

@cinek: Sì, esegue il git pullpull e si fonde con il ramo corrente, quindi il suo comportamento dipende completamente da quale ramo viene estratto e con un HEAD scollegato (nessun ramo estratto), non è possibile sapere quale ramo estrarre.
Cascabel

@cinek: immaginavo che fossi nuovo in git quindi ammetto che eri in uno stato totalmente standard su branch master, colpa mia :-).
p4bl0

86

Per risolverlo, supponendo che tu sia sul masterramo e desideri estrarre il masterramo dal origintelecomando, in versioni Git abbastanza nuove (1.8 o successive):

git branch -u origin/master master

(Analogamente per altri rami e / o telecomandi.)

Se puoi combinare questo con una spinta, è ancora più breve:

git push -u origin master

Successivamente, un semplice git pull/ git pushfarà quello che ti aspetti.


Durante la serie Git 1.7, git branchnon c'era lo -uswitch (lo aveva solo git push), e invece dovevi usare il molto più a lungo --set-upstream:

git branch --set-upstream master origin/master

Notare l'inversione di argomenti rispetto a -u. Ho armeggiato con questo ordine più di una volta.


Tutti questi, a proposito, sono scorciatoie per fare quanto segue, che puoi ancora fare esplicitamente:

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

Prima di 1.7, è dovuto a farlo in questo modo.


Penso che il comando in alto (almeno nella mia versione di Git) imposta l'upstream di un ramo chiamato "origin" come "origin / master". Se il tuo ramo locale si chiama "master", penso che vorrai:git branch --set-upstream master origin/master
Evan Donovan

È interessante notare che l' -uopzione non è documentata git branchnella mia versione, 1.8.5.3, rendendo la tua documentazione qui ancora più importante. E, come noti, l'opzione non era disponibile nella versione 1.7. *. Dato che -uè l'abbreviazione di --set-upstream, l'ordine dei suoi argomenti non dovrebbe essere invertito come hai fatto per a --set-upstreamcausa del commento di @ EvanDonovan?
piani cottura

Tuttavia, quando utilizzo il comando you show ( git branch -u origin/master master) funziona come previsto / previsto per me: "Branch master impostato per tracciare il branch master remoto dall'origine."
piani cottura

1
@hobs: questa è in realtà una perversità di Git. L' -uinterruttore in realtà non è la forma abbreviata di --set-upstream. Il suo ordine di argomenti è effettivamente invertito rispetto all'ordine di --set-upstream. Penso che sia stato solo più tardi che --set-upstream-to(nota il "-to") è stato introdotto, che è quello che -uora è effettivamente la forma abbreviata di.
Aristotele Pagaltzis

Wow! Davvero confuso. Grazie per aver districato questo per me.
piani cottura

3

Il messaggio dice esattamente di cosa si tratta. Il tuo ramo attuale non è associato (non sta monitorando) nessun ramo in origine . Quindi git non sa cosa tirare.

Cosa fare? Dipende...

Nella maggior parte delle situazioni usuali stai lavorando su un ramo locale xyz che si è ramificato dal master che è clonato dal master di origine . Il modo usuale per risolverlo è passare a master e pull per sincronizzarlo con origin e poi tornare a xyz e rebase master.

Ma nella tua situazione potresti voler fare qualcos'altro. Non possiamo saperlo senza conoscere i dettagli dei tuoi rami e telecomandi e come intendi usarli.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.