2012-04-13 13 views
126

ho clonato un repository git e poi verificato un tag:tag git checkout, git pull fallisce nel ramo

# git checkout 2.4.33 -b my_branch 

Questo è OK, ma quando provo a fare funzionare git pull nel mio ramo, git sputa fuori questo errore:

There is no tracking information for the current branch. Please specify which branch you want to merge with. See git-pull(1) for details

git pull <remote> <branch> 

If you wish to set tracking information for this branch you can do so with:

git branch --set-upstream new origin/<branch> 

voglio git pull aggiornare solo ramo principale e lasciare il mio ramo corrente da solo (si tratta di un tag in ogni caso). È possibile qualcosa del genere?

La ragione per cui ho bisogno di questo è che ho uno script automatico che sempre git tira il repository e, naturalmente, non riesce a causa dell'errore di cui sopra ..

+0

Possibile duplicato di [git pull: non ci sono informazioni di tracciamento per il ramo attuale] (http://stackoverflow.com/questions/32056324/git-pull-there-is-no- tracking-information-per-the-current-branch) – daisy

risposta

103

Edit: Per le versioni più recenti del Git, --set-upstream master è stato deprecato, si dovrebbe usare --set-upstream-to invece :

git branch --set-upstream-to=origin/master master 

Come richiesto, si può semplicemente eseguire:

git branch --set-upstream master origin/master 

Dopo di che, si può semplicemente eseguire git pull per aggiornare il codice.

+4

Questo ha risolto il problema. Ma devo ancora capire come il mio master branch abbia perso il riferimento all'origine. Ero su un ramo e ho fatto 'git checkout master'. Non potevo fare 'git pull' perché il riferimento all'origine era perso. Ora funziona. Grazie! – Ariel

6

tornare al ramo master utilizzando

$ git checkout master 

e quindi eseguire l'operazione git pull

$ git pull origin/master 

In seguito, è possibile passare di nuovo al vostro my_branch di nuovo.

+6

Questo è esattamente quello che sto cercando di evitare. Volevo sapere se esiste un modo "ufficiale" per farlo. – alesko

0

Per scaricare gli aggiornamenti solo:

git fetch origin master 

Tuttavia, questo solo aggiorna un riferimento chiamato origin/master. Il modo migliore per aggiornare il tuo locale master sarebbe il checkout/unione menzionato in un altro commento. Se si può garantire che il vostro locale master non si è discostato dal tronco principale che origin/master è acceso, è potrebbe uso git update-ref di mappare il vostro attuale master al nuovo punto, ma che probabilmente non è la migliore soluzione di utilizzare un regolarmente ...

90

ho avuto lo stesso problema e ha risolto il tutto con questo comando:

$ git push -u origin master 

Dal file di aiuto del -u imposta sostanzialmente l'impostazione predefinita per tira:

-u, --set-upstream` 

    For every branch that is up to date or successfully pushed, add 
    upstream (tracking) reference, used by argument-less git-pull(1) and 
    other commands. For more information, see branch.<name>.merge in 
    git-config(1). 
5

@alesko: non è possibile fare solo ilmy_branch per aggiornare solo il ramo master.
Perché git pull sarà anche unire alla corrente ramo -> nello scenario al my_branch

@Simon: che farà anche la spinta. perché?

$ git branch -u origin/master 
Branch master set up to track remote branch master from origin. 

e tronchi con a documenti:

-u <upstream> 
    Set up <branchname>'s tracking information so <upstream> is considered 
    <branchname>'s upstream branch. If no <branchname> is specified, 
    then it defaults to the current branch. 
47

provare questi comandi:

git pull origin master 
git push -u origin master 
4

Innanzitutto, assicurati di essere nel ramo giusto.
Poi (solo una volta):

git branch --track 

Dopo che questo funziona ancora:

git pull 
1

È necessario impostare il monitoraggio (a monte) per il ramo corrente

git branch --set-upstream master origin/master 

È già deprecato invece che puoi usare --track flag

git branch --track master origin/master 

Mi piace anche il riferimento doc tale avviso @casey:

-u <upstream> 
    Set up <branchname>'s tracking information so <upstream> is considered 
    <branchname>'s upstream branch. If no <branchname> is specified, 
    then it defaults to the current branch. 
1

Che cosa ha funzionato per me è stato: git branch --set-monte-a = origine maestro quando ho fatto di nuovo un pull solo io ottenuto gli aggiornamenti dal master e l'avviso è andato via.

4

Potresti avere più diramazioni. E il tuo attuale ramo non ha impostato il suo upstream in remoto.

passaggi per risolvere questo problema:

git checkout branch_name 
git branch --set-upstream-to=origin/remote_branch_name local_branch_name 

esempio

// this set upstream of local branch develop to remote branch origin/develop, 
git branch --set-upstream-to=origin/develop develop 

Dopo aver fatto questo, quando lo fai git pull, è tirare dal ramo specificato.

2

Prova questo

git checkout master 

git pull origin master 
+2

Questo non è davvero rispondere alla domanda. Anche se non c'è una risposta accettata, la prima votata è molto più adatta come risposta a questa vecchia domanda – fejese

0

Questo comando è deprecato: git branch --set-upstream master origin/master

Così, quando si cerca di impostare il monitoraggio, questo è il comando che ha funzionato per me:

git branch --set-upstream-to=origin/master master 
1

Se come me lo devi fare sempre, puoi impostare un alias per farlo automaticamente aggiungendo quanto segue al tuo file .gitconfig:

[alias] 
    set-upstream = !git branch --set-upstream-to=origin/`git symbolic-ref --short HEAD` 

Quando viene visualizzato il messaggio There is no tracking information..., basta eseguire git set-upstream, quindi git push di nuovo.

Grazie a https://zarino.co.uk/post/git-set-upstream/

1

è possibile specificare che ramo si vuole tirare:

git pull origin master 

Oppure si potrebbe impostarlo in modo che il branch master tracce github branch master locale come un monte:

Questo monitoraggio del ramo viene impostato automaticamente quando si clona un repository (solo per il ramo predefinito), ma se si aggiunge un telecomando a un repository esistente devi impostare tu stesso il tracciamento. Per fortuna, il consiglio dato da git rende abbastanza facile ricordare come fare.

--set-upstream è deprecato in git 1.9.x, apparentemente. Andando avanti che ci si vuole usare qualcosa come

git branch -u origin/master 

assumendo aver controllato maestro già. In caso contrario, git branch -u origin/master master funzionerà