2012-12-18 23 views
8

come faccio a recuperare un ramo remoto e aggiornare git's ref locale per quel ramo senza influenzare il ramo corrente? Ad esempio, se lo faccio,git fetch ramo remoto e rif rif.

$ git pull origin master 

origine/master viene unito al mio attuale ramo. Anche questo non funziona

$ git fetch origin master 

Come allora mi controllare

$ git branch -r -v 
origin/HEAD -> origin/master 
origin/master 7cf6ec5 test 02 

che origin/master ref "7cf6ec5 di prova 02" è dietro. La vera origine/master è un "XXXXXX test 03". git fetch ha inserito le modifiche solo in FETCH_HEAD, ma non ha caricato l'origine locale/rif. Qual è il passo per aggiornare quel riferimento?

Nota:

$ git fetch origin 

Otterrà tutti arbitri remote e aggiornarli ma purtroppo questo è (a) un sacco di confusione. (Non voglio che i 30-50 rami casuali di qualcun altro sappiano che qualcuno non vorrebbe il mio) e (b) come rami cancellati sull'origine quegli errori non vengono eliminati localmente la prossima volta che faccio git fetch origin che significa quel percorso finisce con cruft.

La domanda è: come recuperare un solo ramo e aggiornare il suo riferimento localmente?

risposta

1
git fetch origin 

questo recupera tutti i rami remoti e aggiorna i rami di monitoraggio remoto per loro.

Ora si può fare una delle due cose

git checkout other-branch 
git merge origin/other-branch 
git checkout - 

o

git push . origin/other-branch:other-branch 

L'ultima opzione è ok se si sa che sta per essere un avanzamento rapido si fondono.

+1

Grazie. Come faccio a recuperare e aggiornare l'origine/master. Non voglio tutti i 30 o 50 rami dal repository remoto. In effetti, ho appena provato 'git fetch origin '. Quindi ho cancellato un ramo sull'origine. Poi ho fatto di nuovo git fetch origin e vedo che il branch ref che è stato cancellato all'origine è ancora nel mio repository locale quando eseguo 'git branch -r -v' – gman

+1

i rami di tracciamento non vengono cancellati su un fetch. Hai bisogno di git prune remote per quello. –

+0

Qual è la differenza tra 'git fetch origin' e' git fetch --all'? – jww

0

È sempre possibile fornire un riferimento al comando git fetch. In particolare, se si desidera aggiornare other-branch, si può fare:

git fetch origin other-branch:other-branch 

che recupererà la punta di corrente refs/heads/other-branch di origine, e metterla in una filiale locale con lo stesso nome.

Un altro modo, è quello di andare avanti e di:

git fetch origin other-branch 

E quindi ricreare la filiale locale:

git branch -l -f other-branch -t origin/other-branch 

Il -l è lì come un meccanismo di sicurezza. Creerà una voce di riferimento, in modo da poter tornare alla versione precedente se necessario.

5

Penso che quello che sto cercando è questo

$ git fetch origin master:refs/remotes/origin/master 

che non sembra funzionare in che a differenza di 'git fetch maestro origine' Io in realtà vedo l'arbitro si aggiorna.

Qualsiasi motivo è la risposta sbagliata? Qualcosa di cui dovrei essere spaventato?