Corso
Quando dobbiamo lavorare su un branch in un repository remoto, ad esempio il lavoro di un collega o un nuovo branch di funzionalità, ci troviamo di fronte alla sfida di accedere a quel branch in locale e aggiornarlo.
Per fortuna, Git semplifica questo processo offrendo comandi immediati per creare una copia locale del branch remoto. Questo ci permette di passare al branch desiderato, contribuire e collaborare in modo efficace con il team.
Per una risposta rapida, per fare il checkout di un branch chiamato <branch_name>, eseguiamo:
git fetch origin <branch_name>
git checkout -b <branch_name> origin/<branch_name>
In questo articolo esploriamo questi comandi e vediamo più in dettaglio come funzionano.
Il processo in due passaggi: git fetch e git checkout
Per iniziare a lavorare in locale su un branch remoto, dobbiamo prima assicurarci che il nostro repository locale sia aggiornato rispetto a quello remoto. Poi possiamo creare una copia locale e iniziare a lavorare su quel branch.
Aggiornare il repository locale
Per aggiornare il repository locale usiamo il git fetch command. Nella sua forma più semplice non usa argomenti:
git fetch
Quando viene usato senza argomenti, il comando git fetch recupera tutti i branch dal repository remoto predefinito. Sebbene questo includa il branch che ci interessa, occuperà anche più spazio su disco locale.
Se lo spazio su disco è un problema, possiamo specificare il branch da recuperare passandolo come parametro al comando:
git fetch origin <branch_name>
Sostituisci <branch_name> con il nome del branch desiderato. Il parametro origin specifica il nome del repository remoto. Per impostazione predefinita, quando cloniamo un repository, il remoto si chiama origin.
È importante notare che l’aggiornamento dei riferimenti remoti con fetch non influisce su alcun file locale né causa conflitti. In locale, esistono due entità distinte:
- La working directory corrente
- Il repository locale
Le nostre modifiche e i nostri commit attuali si trovano nella working directory corrente. Questi sono i file che vediamo quando apriamo la cartella del repository sul computer. Questi non vengono aggiornati con git fetch. Si aggiorna solo il repository locale, che possiamo considerare come una copia nascosta del repository remoto sulla nostra macchina.
Fare il checkout di un branch remoto
Con una copia aggiornata del repository remoto, ora possiamo creare una copia locale di un branch remoto usando il comando git checkout:
git checkout -b <branch_name> origin/<branch_name>
Sostituisci <branch_name> con il nome del branch remoto desiderato. Il primo parametro dopo -b è il nome che vogliamo assegnare al branch locale. Per convenzione usiamo lo stesso nome per entrambi, ma potremmo usare qualsiasi altro nome, a patto che nessun altro branch locale abbia già quel nome:
git checkout -b <local_branch_name> origin/<branch_name>
Dopo aver eseguito correttamente questo comando, Git passerà la working directory corrente a questo branch e saremo pronti per iniziare a lavorarci.
git checkout vs git switch
Il comando git checkout esiste fin dagli inizi di Git. Il suo ambito va oltre la creazione di copie locali di branch o il passaggio da un branch all’altro. Per esempio, può recuperare file specifici dal repository remoto.
Nelle versioni recenti di Git è stato introdotto il comando git switch, il cui unico scopo è creare copie locali di branch remoti e passare tra branch locali.
Ti consiglio di usare git switch invece di git checkout perché le capacità estese di git checkout a volte possono portare a errori.
Per imparare a eseguire le stesse azioni viste in questo articolo usando git switch, puoi leggere questo tutorial: Git Switch Branch: guida con esempi pratici.
Conclusione
Creare in locale una copia di un branch Git remoto è fondamentale per collaborare. Usando git fetch e git checkout, possiamo aggiornare il nostro repository locale con le modifiche remote e passare al branch desiderato.
Sebbene il classico git checkout offra funzionalità robuste, il più recente comando git switch propone un’alternativa snella, pensata specificamente per la gestione dei branch, riducendo il rischio di errori.
FAQs
Ricevo l'errore: "please commit your changes or stash them before you switch branches." Come lo risolvo?
Git impedisce di passare a un altro branch se quello corrente ha modifiche non confermate (uncommitted). Per risolvere, possiamo accantonare le modifiche o effettuare un commit.
Per fare il commit usiamo il seguente comando:
git commit -m "Commit message"
In alternativa, se vogliamo conservare le modifiche senza ancora committarle, possiamo usare il comando git stash per salvarle temporaneamente:
git stash
Più tardi potremo riapplicarle tornando al branch originale e usando il comando git stash pop.
E se il branch remoto ha lo stesso nome di un branch locale?
I nomi dei branch devono essere univoci in Git. Se riceviamo un errore che indica che il branch esiste già, significa che c’è un branch locale con lo stesso nome. Questo può voler dire due cose:
- Abbiamo già fatto il checkout di questo branch in passato. In questo caso, possiamo passarci direttamente senza fare fetch usando il comando
git checkout <branch_name>. Nota che abbiamo omesso il parametro-b, usato per indicare che vogliamo creare un nuovo branch. Poiché il branch esiste già, non serve ricrearlo. - A un certo punto abbiamo creato un branch diverso che però ha lo stesso nome. Possiamo risolvere usando un nome di branch differente con
git checkout -b <different_name> origin/<branch_name>.
Posso apportare modifiche direttamente a un branch remoto?
No, le modifiche in un branch Git si fanno prima creando una copia locale del branch, come visto sopra, e poi creando commit che rappresentano le modifiche desiderate.
Come aggiorno il mio branch locale con le ultime modifiche remote?
Per aggiornare il nostro branch locale con le ultime modifiche dal corrispondente branch remoto, in genere usiamo il comando git pull:
git pull origin <branch_name>
Questo esegue sia un git fetch sia un git merge per aggiornare il branch locale. Abbiamo visto che git fetch aggiorna il repository locale con l’ultima versione remota. Il comando git merge unisce tali modifiche nel nostro branch locale. Per maggiori dettagli, consulta questo tutorial su Git push e pull.
Ricevo l'errore: "remote branch not found." Come lo risolvo?
Questo errore indica che il branch non esiste nella nostra copia locale del repository. Quindi o:
- Il branch non esiste, il che può indicare un refuso nel nome del branch o che si tratta di un branch vecchio già eliminato.
- Il repository locale non è aggiornato. Come visto sopra, possiamo aggiornarlo usando
git fetch.


