W3docs

Introduzione

Scopri come funzionano i branch Git: crea e cambia branch, unisci il lavoro, risolvi i conflitti e scegli una strategia di merge. Con esempi.

Diagramma panoramico dei conflitti di merge in Git

Un branch è un puntatore leggero e mobile verso un commit. Ti permette di lavorare su una nuova funzionalità, una correzione di bug o un esperimento in modo isolato — senza toccare il codice su cui si basano tutti gli altri. Quando il lavoro è pronto, esegui il merge del branch per far sì che le sue modifiche diventino parte del flusso principale di sviluppo.

Questa pagina è la panoramica della sezione dedicata ai branch del libro. Introduce i comandi che utilizzerai per creare, spostarti tra, combinare ed eliminare i branch, oltre a come gestire i conflitti che possono sorgere quando due linee di sviluppo modificano lo stesso codice. Ogni sezione rimanda a un capitolo dedicato con tutti i dettagli. Al termine della parte dovresti essere a tuo agio con il flusso di lavoro quotidiano con i branch mostrato nell'esempio qui sotto.

git branch

Il comando git branch crea, elenca ed elimina i branch. Non consente di spostarsi tra i branch né di unire una cronologia divergente — queste sono le funzioni di git checkout e git merge. Creare un branch aggiunge semplicemente un nuovo puntatore al commit su cui ti trovi attualmente; non copia file né altera la cronologia, ed è per questo che creare branch in Git è rapido ed economico.

git branch              # list local branches (the current one is marked with *)
git branch new-feature  # create a branch called new-feature
git branch -d old-work  # delete a branch that has already been merged

Un branch Git è meglio pensarlo come un puntatore a uno snapshot delle tue modifiche, non come una copia separata del progetto.

git checkout

Il comando git checkout cambia branch o ripristina i file dell'albero di lavoro. Quando cambi branch, Git aggiorna i file nella tua directory di lavoro per farli corrispondere alla versione memorizzata nel branch di destinazione e sposta il puntatore HEAD — il riferimento che tiene traccia di "dove ti trovi ora" — su quel branch.

git checkout new-feature      # switch to an existing branch
git checkout -b new-feature   # create new-feature AND switch to it in one step

Nelle versioni moderne di Git puoi usare anche git switch per la parte di cambio branch; checkout rimane il comando più ampiamente documentato. Il flag -b è la forma che utilizzerai più spesso quando inizi a lavorare.

git merge

Il comando git merge integra linee di sviluppo indipendenti in un unico branch. Prima esegui il checkout del branch che deve ricevere le modifiche, poi esegui il merge dell'altro branch al suo interno. Git risolve il merge in uno dei due modi seguenti:

  • Fast-forward — se il branch ricevente non ha commit propri dalla divergenza dell'altro branch, Git sposta semplicemente il suo puntatore in avanti. Non viene creato alcun nuovo commit.
  • Merge a tre vie — se entrambi i branch hanno nuovi commit, Git li combina e registra un apposito merge commit con due genitori.
git checkout main        # the branch that will receive the work
git merge new-feature    # bring new-feature's commits into main
git branch -d new-feature  # delete the merged branch (now redundant)

Conflitti di merge

Un conflitto di merge si verifica quando Git non riesce a combinare automaticamente due branch — tipicamente quando entrambi i branch modificano le stesse righe dello stesso file, oppure quando un branch elimina un file che l'altro ha modificato. Git sospende il merge e contrassegna le aree in conflitto nei file interessati con marcatori di conflitto come questo:

<<<<<<< HEAD
the change on the current branch
=======
the change coming from the other branch
>>>>>>> new-feature

Risolvi un conflitto modificando il file fino allo stato finale desiderato, rimuovendo i marcatori, quindi mettendo in staging e committando il risultato. Lavorare in branch isolati mantiene i conflitti ridotti e poco frequenti, ma fanno parte del normale processo di collaborazione — non sono il segnale che qualcosa è andato storto.

Strategie di merge in Git

Quando il lavoro è pronto per essere unito al flusso principale, Git applica una strategia di merge — l'algoritmo che usa per combinare i branch. Se non ne specifichi esplicitamente una, Git sceglie un'impostazione predefinita ragionevole (ort nelle versioni correnti, in precedenza recursive) in base ai branch coinvolti. Di solito non è mai necessario impostare manualmente una strategia; vale la pena sapere che esistono per i casi occasionali in cui una specifica può essere d'aiuto.

Un tipico flusso di lavoro con i branch

Mettendo insieme i comandi, una singola funzionalità di solito segue questo percorso:

git checkout -b add-login   # 1. branch off main and switch to it
# ... edit files, then ...
git add .
git commit -m "Add login form"
git checkout main           # 2. switch back to the receiving branch
git merge add-login         # 3. integrate the feature
git branch -d add-login     # 4. clean up the merged branch

Per approfondire, continua con git branch per il set completo di operazioni sui branch, oppure passa direttamente al flusso di lavoro con feature branch per vedere questo schema applicato a un team reale.

Esercitazione

Pratica
Quali sono le funzionalità dei diversi comandi Git relativi ai branch?
Quali sono le funzionalità dei diversi comandi Git relativi ai branch?
Was this page helpful?