git checkout <branch>
Ad esempio, per spostarsi sul branch Test:
git checkout Test
L’operazione sposta il puntatore HEAD affinché punti al branch Test attivo: da quel momento, eventuali commit modificheranno il branch Test.
![]() |
| FIG 1 - git checkout |
Effetti del cambio di branch
- HEAD punta al branch attivo
Dopo git checkout test, HEAD non punta direttamente a un commit ma al riferimento simbolico del branch Test (es. HEAD -> Test). Il commit successivo aggiornerà il puntatore Test al nuovo commit. - Modifiche alla working directory
Al cambio di branch Git aggiorna i file nella working directory per riflettere lo snapshot dell’ultimo commit del branch di destinazione. Se le variazioni locali impediscono un passaggio netto (ad es. file modificati che verrebbero sovrascritti), Git impedisce lo switch e segnala il conflitto. - Creazione di nuovi commit sul branch attivo
Dopo il checkout, un commit (ad esempio git commit -a -m 'Modifica readme') avanzerà esclusivamente il puntatore del branch attivo, lasciando gli altri branch invariati. Di conseguenza, è possibile creare storie divergenti in modo isolato su differenti branch (FIG 2).
![]() |
| FIG 2 - Commit su Branch Test |
Esempio di flusso operativo
git branch Test
Switch al branch Test:
git checkout Test
Modifica e commit su Test:
vim readme.txt
git commit -a -m "Modifica readme"
![]() |
| FIG 3 - Commit su nuovo branch |
git checkout master
![]() |
| FIG 4 - Cambio Branch. HEAD su master |
Questo riporta HEAD su master e ripristina i file alla versione indicata da master.
Divergenza della cronologia e visualizzazione
Quando si effettua lavoro parallelo su due branch differenti (ad esempio Test e master), la cronologia si diverge; successivamente le due linee potranno essere unite tramite merge o rebase. Per ispezionare la storia completa e visualizzare i punti di divergenza è utile il comando:
git log --oneline --decorate --graph --all
![]() |
| FIG 5 - git log |
Note operative e avvisi importanti
git log non mostra sempre tutti i branch: per default git log visualizza la storia a partire dal commit riferito dal branch attualmente selezionato. Per vedere la storia di un branch specifico usare git log <branch>; per mostrare tutti i branch usare --all.
Cambiare branch modifica i file sul disco: switching ripristina la working directory allo snapshot dell’ultimo commit del branch scelto. Se Git non è in grado di effettuare queste modifiche senza perdita di dati locali, il comando verrà rifiutato.
Comportamento con modifiche non committate:
- Se si hanno modifiche locali non committate che non confliggono con i contenuti del branch di destinazione, Git generalmente permette lo switch mantenendo le modifiche.
- Se ci sono conflitti, Git bloccherà lo switch: in tal caso è necessario committare, stashare (git stash) o ripristinare (git restore) le modifiche prima di procedere.
git switch (comandi raccomandati nelle versioni moderne)
A partire da Git 2.23 è consigliato usare git switch per le operazioni di cambio branch (più leggibile e focalizzato rispetto al multitool git checkout):
- Passare a un branch esistente:
git switch Test - Creare un nuovo branch e passare a esso:
git switch -c new-branch
oppure
git switch --create new-branch - Tornare al branch precedentemente attivo:
git switch -
git switch separa chiaramente le semantiche di “cambio branch” da quelle di “ripristino file” che git checkout tradizionalmente confliggeva.
Best practice
- Non lavorare su main/master direttamente — usare feature branch (feature/…), bugfix branch (bugfix/…) o hotfix branch (hotfix/…) per isolare il lavoro.
- Eseguire commit atomici e frequenti: commit logici e piccoli rendono il merge e il debug più semplici.
- Sincronizzare spesso con il remoto (git fetch + git merge/rebase) prima di iniziare un lavoro esteso, per ridurre la probabilità di conflitti.
- Usare git switch quando possibile per migliorare chiarezza e sicurezza delle operazioni.
- Usare git stash per mettere temporaneamente da parte modifiche non ancora pronte se è necessario effettuare uno switch immediato.
- Visualizzare la storia con grafo (git log --oneline --decorate --graph --all) per avere un quadro completo delle divergenze e dei punti di merge.
Sintesi rapida dei comandi
| Operazione | Comando |
|---|---|
| Creare un branch senza switch | git branch Test |
| Creare e switchare (una riga) | git checkout -b Test / git switch -c Test |
| Switchare su branch esistente | git checkout Test / git switch Test |
| Tornare all'ultimo branch | git checkout - / git switch - |
| Visualizzare grafo completo | git log --oneline --decorate --graph --all |
| Mettere da parte modifiche non committate | git stash push -m "work-in-progress" |
| Ripristinare stash | git stash pop |





Nessun commento:
Posta un commento
I messaggi sono soggetti a moderazione da parte dell'amministratore prima della loro pubblicazione.