Come scaricare un ramo con git?


214

Ho un progetto ospitato su GitHub. Ho creato un ramo su un computer, quindi ho inviato le mie modifiche a GitHub con:

git push origin branch-name

Ora sono su un altro computer e voglio scaricare quel ramo. Quindi ho provato:

git pull origin branch-name

... ma tutto ciò è stato sovrascrivere il mio ramo principale con le modifiche nel mio nuovo ramo.

Cosa devo fare per estrarre correttamente il mio ramo remoto, senza sovrascrivere i rami esistenti?

Risposte:


377

Grazie a una domanda correlata , ho scoperto che è necessario "estrarre" il ramo remoto come nuovo ramo locale e specificare un nuovo nome di ramo locale.

git checkout -b newlocalbranchname origin/branch-name

Oppure puoi fare:

git checkout -t origin/branch-name

Quest'ultimo creerà un ramo che è anche impostato per tenere traccia del ramo remoto.


Aggiornamento: sono passati 5 anni da quando ho pubblicato questa domanda. Ho imparato molto e git è migliorato da allora. Il mio solito flusso di lavoro è un po 'diverso ora.

Se voglio recuperare i rami remoti, corro semplicemente:

git pull

Ciò recupererà tutti i rami remoti e unirà il ramo corrente. Verrà visualizzato un output simile al seguente:

From github.com:andrewhavens/example-project
   dbd07ad..4316d29  master     -> origin/master
 * [new branch]      production -> origin/production
 * [new branch]      my-bugfix-branch -> origin/my-bugfix-branch
First, rewinding head to replay your work on top of it...
Fast-forwarded master to 4316d296c55ac2e13992a22161fc327944bcf5b8.

Ora Git sa del mio nuovo my-bugfix-branch. Per passare a questo ramo, posso semplicemente eseguire:

git checkout my-bugfix-branch

Normalmente, avrei bisogno di creare il ramo prima di poterlo controllare, ma nelle versioni più recenti di git, è abbastanza intelligente sapere che vuoi fare il checkout di una copia locale di questo ramo remoto.


Sto usando GIT 1.7.2.5, e il comando che ha lavorato per me era: git branch --track XX origin/XX. Il tuo comando mi dà un errore.
dimitarvp,

8
Se non hai scaricato tutti i rami remoti, questo potrebbe non riuscire. Fai "git remote update" per eliminarli.
Ben Walding,

1
In realtà, può essere ancora più breve "git checkout nome-ramo". Se il nome del ramo è uguale a un ramo di tracciamento remoto (ovvero origine / nome ramo), allora è automaticamente un ramo di tracciamento locale.
DavidN,

64

Per i neofiti di Git come me, ecco alcuni passaggi che è possibile seguire per scaricare un repository remoto, quindi passare al ramo che si desidera visualizzare. Probabilmente abusano di Git in qualche modo, ma ha fatto il lavoro per me! :-)

Clona il repository per cui vuoi scaricare il codice (in questo esempio ho scelto il progetto LRResty su Github):

$ git clone https://github.com/lukeredpath/LRResty.git
$ cd LRResty

Controlla quale ramo stai utilizzando a questo punto (dovrebbe essere il ramo principale):

$ git branch    
* master

Scopri il ramo che desideri, nel mio caso si chiama 'arcificato':

 $ git checkout -b arcified origin/arcified
 Branch arcified set up to track remote branch arcified from origin.
 Switched to a new branch 'arcified'

Conferma che stai utilizzando il ramo desiderato:

$ git branch    
* arcified
  master

Se si desidera aggiornare nuovamente il codice in un secondo momento, eseguire git pull:

$ git pull
Already up-to-date.

"Probabilmente abusano di Git in qualche modo" - no, questo è esattamente giusto.
Big McLargeHuge

28

Puoi usare git remote come:

git fetch origin

e quindi impostare un ramo locale per tenere traccia del ramo remoto come di seguito:

git branch --track [local-branch-name] origin/remote-branch-name

Ora avresti il ​​contenuto del ramo github remoto in nome-ramo-locale.

Puoi passare a quel nome di filiale locale e iniziare a lavorare:

git checkout [local-branch-name]

18

Puoi usare :

git clone <url> --branch <branch>

per clonare / scaricare solo i contenuti del ramo.

Questo mi è stato particolarmente utile, poiché i contenuti del mio ramo erano completamente diversi dal ramo principale (anche se di solito non è così). Quindi, i suggerimenti elencati da altri sopra non mi hanno aiutato e sarei finito per ottenere una copia del master anche dopo aver controllato il ramo e fatto un tiro git.

Questo comando ti darebbe direttamente il contenuto del ramo. Ha funzionato per me.


1
Questa è la risposta migliore Semplice ed efficace
Derek,

2
Questo non sembra funzionare per me. Dice che c'è già una cartella con quel nome (che, ovviamente, c'è)
Jonathan Tuzman

1
@Jonathan Non aggiungerà un nuovo ramo con quello esistente. Può essere utilizzato solo per clonare una nuova copia. Non vedo perché dovrebbe esserci già una cartella con quel nome se non hai già clonato il repository. Prova a clonare in un'altra posizione.
Vecchio Markus,

Non aggiorna un progetto esistente con una nuova filiale
Abbaglia il

16

Passare alla cartella sul nuovo computer che si desidera scaricare da Git su Git Bash.

Utilizzare il comando seguente per scaricare il codice da qualsiasi ramo che ti piace

git clone 'git ssh url' -b 'Branch Name'

Scarica il rispettivo codice di filiale.


9

Git clone e cd nel nome del repository:

$ git clone https://github.com/PabloEzequiel/iOS-AppleWach.git
Cloning into 'iOS-AppleWach'...
$ cd iOS-AppleWach

Passa al ramo (una pagina GitHub) che desidero:

$ git checkout -b gh-pages origin/gh-pages
Branch gh-pages set up to track remote branch gh-pages from origin.
Switched to a new branch 'gh-pages'

E tira il ramo:

$ git pull
Already up-to-date.

ls:

$ ls
index.html      params.json     stylesheets


0

Puoi provare

git fetch <remoteName> <branchName>

Per esempio:

git fetch origin MyRemoteBranch

-8

Crea una nuova directory ed esegui invece un clone.

git clone (indirizzo di origine) (nome della filiale)


3
Non puoi clonare solo un ramo in Git. È possibile eseguire solo un clone di repository completo.
Alan Haggai Alavi,
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.