tag checkout git, git pull non riesce nel ramo


133

Ho clonato un repository git e quindi verificato un tag:

# git checkout 2.4.33 -b my_branch

Questo va bene, ma quando provo a correre git pullnel mio ramo, git sputa questo errore:

Non ci sono informazioni di tracciamento per il ramo corrente. Si prega di specificare con quale ramo si desidera unire. Vedere git-pull (1) per i dettagli

git pull <remote> <branch>

Se desideri impostare le informazioni di tracciamento per questo ramo puoi farlo con:

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

Voglio git pullsolo aggiornare il ramo principale e lasciare solo il mio ramo attuale (è comunque un tag). È possibile qualcosa del genere?

Il motivo per cui ho bisogno di questo è che ho uno script automatico che git estrae sempre il repository e ovviamente fallisce a causa dell'errore sopra.


Risposte:


114

Modifica: per le versioni più recenti di Git, --set-upstream masterè stato deprecato, è necessario utilizzare --set-upstream-toinvece:

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

Come richiesto, puoi semplicemente eseguire:

git branch --set-upstream master origin/master

Successivamente, puoi semplicemente eseguire git pullper aggiornare il tuo codice.


5
Questo ha risolto il problema. Ma devo ancora capire come il mio ramo principale abbia perso il riferimento all'origine. Ero su un ramo e l'ho fatto git checkout master. Non ho potuto farlo git pullperché il riferimento all'origine è stato perso. Ora funziona. Grazie!
Ariel,

'git branch --set-upstream-to = origin / master master my_branch' ha funzionato per me
Blue Clouds

90

Ho avuto lo stesso problema e l'ho risolto con questo comando:

$ git push -u origin master

Dal file di aiuto, -u fondamentalmente imposta il valore predefinito per pull:

-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).

48

Prova questi comandi:

git pull origin master
git push -u origin master

9

Passare al ramo principale utilizzando

$ git checkout master

e quindi eseguire l' git pulloperazione

$ git pull origin/master

Successivamente, puoi tornare di nuovo al tuo my_branch.


6
Questo è esattamente ciò che sto cercando di evitare. Volevo sapere se esiste un modo "ufficiale" per farlo.
alesko,

5

@alesko : non è possibile fare solo git pulldopo il checkout my_branchper aggiornare mastersolo il ramo.
Perché git pullsi unirà anche al ramo corrente -> nel tuo scenario almy_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 secondo i 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.

4

Innanzitutto, assicurati di essere sul ramo giusto.
Quindi (una sola volta):

git branch --track

Dopodiché funziona di nuovo:

git pull

4

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

I passaggi per risolvere questo problema:

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

per 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, si estrae dal ramo specificato.


3

È possibile specificare quale ramo si desidera estrarre:

git pull origin master

Oppure puoi configurarlo in modo che il tuo ramo principale locale tenga traccia del ramo principale di github come upstream:

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

Questo tracciamento delle diramazioni viene impostato automaticamente quando si clona un repository (solo per la diramazione predefinita), ma se si aggiunge un telecomando a un repository esistente è necessario impostare autonomamente il tracciamento. Per fortuna, il consiglio dato da Git rende abbastanza facile ricordare come fare.

--set-upstream è deprecato in git 1.9.x, a quanto pare. Andando avanti vorresti usare qualcosa di simile

git branch -u origin/master

supponendo che tu abbia già verificato il master. In caso contrario, git branch -u origin/master masterfunzionerà


2

Prova questo

git checkout master

git pull origin master

2
Questo non risponde davvero alla domanda. Anche se non c'è una risposta accettata, quella più votata è molto più adatta come risposta a questa vecchia domanda
fejese

1

Devi impostare il monitoraggio (a monte) per la filiale 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 al documento che @casey nota:

-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

Quello che ha funzionato per me è stato: git branch --set-upstream-to = origin master Quando ho fatto di nuovo un pull ho ricevuto solo gli aggiornamenti dal master e l'avviso è sparito.


1

Se come me devi farlo tutto il tempo, puoi impostare un alias per farlo automaticamente aggiungendo quanto segue al tuo .gitconfigfile:

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

Quando vedi il messaggio There is no tracking information..., esegui git set-upstream, quindigit push nuovo.

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


0

Per scaricare solo gli aggiornamenti:

git fetch origin master

Tuttavia, questo aggiorna solo un riferimento chiamato origin/master. Il modo migliore per aggiornare il tuo locale mastersarebbe il checkout / unione menzionato in un altro commento. Se si può garantire che il vostro locale masternon è discostato dal tronco principale che origin/masterè attivo, si potrebbe utilizzare git update-refper mappare il vostro attuale masterper il nuovo punto, ma non è probabilmente la soluzione migliore da utilizzare su base regolare ...


0

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

Quindi, quando provo a impostare il monitoraggio, questo è il comando che ha funzionato per me:

git branch --set-upstream-to=origin/master master
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.