Da Anonimo (non verificato) , 29 Aprile 2026

Introduzione

I branch sono come Git supporta linee di lavoro parallele. Creare un branch è essenzialmente gratuito: è solo un file di 41 byte contenente un hash di commit. Usali generosamente per feature, esperimenti e bug fix.

Comandi moderni

Da Git 2.23 ci sono due comandi appositi: git switch per i branch e git restore per i file. Usali; sono più chiari del comportamento sovraccarico di git checkout.

git switch main                    # passa a un branch esistente
git switch -c feature/login        # crea e passa
git switch -c hotfix v1.2.3        # crea da un tag
git switch -                       # branch precedente (come cd -)

Elencare i branch

git branch                    # locali
git branch -r                 # tracking remoto
git branch -a                 # tutti
git branch -vv                # con upstream e ahead/behind
git branch --merged           # mergiati nel corrente
git branch --no-merged        # non ancora mergiati

Rinominare e cancellare

git branch -m old new             # rinomina
git branch -m new                  # rinomina il branch corrente
git branch -d feature/login        # cancella un branch mergiato
git branch -D feature/abandoned    # forza cancellazione di non mergiati

-d rifiuta se il branch ha commit non mergiati, proteggendo il lavoro.

Tracciare branch remoti

git switch feature/login           # crea automaticamente il locale da origin/feature/login
git switch -c mine origin/feature/login   # esplicito
git branch -u origin/main          # imposta l'upstream del branch corrente

La sintassi classica

I tutorial più vecchi usano git checkout. Funziona ancora:

git checkout main
git checkout -b feature/login
git checkout v1.2.3

Lo svantaggio è che lo stesso comando ripristina anche i file, il che causa confusione. Preferisci switch e restore nei nuovi script.

Convenzioni di naming dei branch

Nomi coerenti rendono il tooling più facile. Pattern comuni:

  • feature/<ticket>-short-desc
  • bugfix/<ticket>-short-desc
  • hotfix/<version>
  • release/<version>
git switch -c feature/PROJ-123-add-search
git config --global branch.autoSetupMerge always
git config --global branch.autoSetupRebase always

Le opzioni autoSetup assicurano che i nuovi branch traccino automaticamente il loro punto di partenza, il che rende la riga ahead/behind di git status significativa dal primo giorno.

Rinominare sul remote

Rinominare un branch remoto sono due operazioni: rinomina localmente e crea il nuovo ref sul server, poi cancella il vecchio:

git branch -m old new
git push -u origin new
git push origin --delete old

Errori comuni

Cambiare branch con modifiche non committate che entrano in conflitto con il target; Git rifiuta, e la soluzione è committare, fare stash o usare git switch --discard-changes se davvero non le vuoi. Creare dozzine di branch di lunga vita e non cancellare mai quelli mergiati; git branch --merged | xargs git branch -d mette in ordine. Nominare i branch con caratteri che confondono le shell (spazi, caratteri glob); attieniti a lettere, cifre, slash e trattino. Infine, cancellare un branch con -D e farsi prendere dal panico quando ti rendi conto che aveva lavoro non mergiato; il reflog ce l'ha ancora per 90 giorni: git reflog, trova lo SHA, git switch -c rescued <sha>.