modulo 03 / lezione 11

Branch e merge

Creare e cambiare branch: switch, checkout, branch

Usare i branch come spazi di lavoro economici e reversibili, non come strutture pesanti.

60 min Git e controllo versione

Creare e cambiare branch: switch, checkout, branch

Un branch è un puntatore mobile a un commit. Crearene uno costa pochissimo. Non duplica il progetto, non crea una copia pesante: dà un nome a una linea di lavoro.

Questa idea rende i branch meno intimidatori. Puoi usarli per feature, fix, esperimenti, spike tecnici e prove da buttare. La cosa importante è dare loro una vita breve e uno scopo chiaro.

Perché questa lezione conta

Chi ha paura dei branch tende a lavorare direttamente su main o a mischiare modifiche non correlate. Chi li usa senza disciplina lascia branch vecchi, divergenti e difficili da integrare.

Il punto non è creare molti branch. È creare branch al momento giusto, da una base corretta, con un nome comprensibile e una fine prevista.

Obiettivo operativo

Alla fine della lezione devi saper creare, cambiare, rinominare e cancellare branch locali, distinguere switch, checkout e branch, e scegliere nomi utili al team.

switch, checkout, branch

Comandi moderni:

git switch main
git switch -c feat/login

switch serve a cambiare branch. Con -c crea e cambia.

Comando storico:

git checkout -b feat/login

Funziona ancora, ma checkout fa troppe cose: cambia branch, ripristina file, entra in detached HEAD. switch è più chiaro per i branch.

Per creare senza cambiare:

git branch feat/login

Per vedere branch:

git branch
git branch -vv

-vv mostra anche upstream e stato rispetto al remoto.

Creare da una base corretta

Prima di aprire un branch:

git switch main
git fetch origin
git status -sb

Poi integra la base secondo il workflow del team:

git pull --ff-only

oppure fetch + rebase/merge consapevole. Aprire branch da una base vecchia significa importare conflitti già evitabili.

Naming

Nomi utili:

feat/login-magic-link
fix/checkout-doppio-submit
chore/aggiorna-dipendenze
docs/readme-deploy
spike/prova-cache-redis

Nomi deboli:

carlo
test
nuovo
fix
finale

Un branch name dovrebbe dire intento e, se utile, collegarsi a ticket o area.

Branch locali e remoti

Un branch locale non esiste automaticamente sul remoto. Per pubblicarlo:

git push -u origin feat/login-magic-link

-u imposta upstream. Da quel momento git push e git pull sanno quale branch remoto usare.

Eliminare branch locale:

git branch -d feat/login-magic-link

-d rifiuta se il branch non è stato integrato. -D forza: usalo solo se sai che stai buttando via lavoro.

Eliminare branch remoto:

git push origin -d feat/login-magic-link

Quando aprire un branch

Apri un branch quando:

  1. il lavoro non è banale;
  2. vuoi aprire una PR;
  3. devi sperimentare;
  4. devi isolare un fix;
  5. il team protegge main.

Non serve branch per ogni micro-correzione locale, se il workflow è individuale e il commit è diretto. Ma in team, branch + PR è spesso il confine naturale di review.

Laboratorio guidato

In un repo demo:

  1. crea feat/a, fix/b, spike/c dallo stesso commit;
  2. fai un commit diverso su ciascuno;
  3. torna a main e osserva che non contiene quei commit;
  4. usa git log --graph --oneline --decorate --all;
  5. cancella il branch sperimentale dopo aver deciso di buttarlo.

Disegna il grafo prima e dopo.

Output atteso

Una convenzione di naming di team:

feat/<area>-<descrizione>
fix/<area>-<bug>
chore/<operazione>
docs/<argomento>
spike/<ipotesi>

e una regola: ogni branch deve avere scopo, owner e fine prevista.

Errori comuni

Aprire branch da base vecchia. Genera conflitti evitabili.

Tenere branch personali per settimane. Più vive, più diverge.

Usare nomi opachi. Il branch deve essere leggibile in una lista remota.

Forzare cancellazione senza controllare. git branch -D può eliminare l’unico riferimento a commit non integrati.

Checklist di verifica

  • so creare branch con git switch -c;
  • so leggere git branch -vv;
  • so pubblicare con upstream;
  • so cancellare branch locale e remoto;
  • so distinguere branch di feature, fix e spike.

Collegamenti

  • Modulo: Branch e merge — lezione 11 del corso.
  • La prossima lezione spiega come integrare branch con merge.