Branch Git

Questo documento รจ una recensione approfondita del comando git branch e una discussione del modello generale di creazione di branch di Git. La creazione di branch รจ una funzionalitร  disponibile nella maggior parte dei moderni sistemi di controllo delle versioni. La creazione di branch in altri VCS puรฒ essere un'operazione costosa sia in termini di tempo che di spazio su disco. In Git, i branch fanno parte del tuo processo di sviluppo quotidiano.

I branch di Git sono effettivamente un puntatore a un'istantanea delle tue modifiche. Quando vuoi aggiungere una nuova funzionalitร  o correggere un bug, non importa quanto grande o piccolo, generi un nuovo branch per incapsulare le tue modifiche. Questo rende piรน difficile il merge di codice instabile nella base di codice principale e ti dร  la possibilitร  di ripulire la cronologia futura prima di eseguirne il merge nel branch principale.

Branch Git

Il diagramma sopra mostra un repository con due linee di sviluppo isolate, una per una piccola funzionalitร  e una per una funzionalitร  piรน a lungo termine. Sviluppandole in branch, non solo รจ possibile lavorare su entrambe in parallelo, ma si mantiene anche il branch main libero da codici discutibili.

L'implementazione dietro i branchi Git รจ molto piรน leggera di altri modelli del sistema di controllo delle versioni. Invece di copiare i file da una cartella all'altra, Git memorizza un branch come riferimento a un commit. In questo senso, un branch rappresenta la punta di una serie di impegni, non รจ un contenitore per i commit. La cronologia di un branch viene estrapolata attraverso le relazioni di commit.

Mentre leggi, ricorda che i branch Git non sono come i branch SVN. Mentre i branch SVN vengono utilizzati solo per registrare gli occasionali sforzi di sviluppo su larga scala, i branch Git sono parte integrante del tuo flusso di lavoro quotidiano. Il seguente contenuto si espanderร  sull'architettura di ramificazione interna di Git.

Come funziona

Un branch rappresenta una linea indipendente di sviluppo. I branch fungono da astrazione per il processo di modifica/staging/commit. Puoi pensare ai branch come a un modo di richiedere una nuova directory di lavoro, un'area di staging e la cronologia di progetto. I nuovi commit vengono registrati nella cronologia del branch corrente, risultando in un fork nella cronologia di progetto.

Il comando git branch ti consente di creare, elencare, rinominare ed eliminare i branch. Non ti consente di passare da un branch all'altro o di ricomporre una cronologia con fork. Per questo motivo, git branch รจ strettamente integrato con i comandi git checkout e git merge.

Opzioni comuni

git branch

Elenca tutti i branch nel tuo repository. รˆ sinonimo di git branch --list.

git branch <branch>

Crea un nuovo branch chiamato <branch๏ผž. Questo non implica il check-out del nuovo branch.

git branch -d <branch>

Elimina il branch specificato. Questa รจ un'operazione ยซsicuraยป in quanto Git ti impedisce di eliminare il branch se presenta modifiche senza merge.

git branch -D <branch>

Forza l'eliminazione del branch specificato, anche se presenta modifiche senza merge. Questo รจ il comando da usare se vuoi eliminare definitivamente tutti i commit associati a una particolare linea di sviluppo.

git branch -m <branch>

Rinomina il branch attuale in <branch๏ผž.

git branch -a

Elenca tutti i branch remoti.ย 

Creazione di branch

รˆ importante capire che i branch sono solo puntatori per i commit. Quando crei un branch, tutto ciรฒ che Git deve fare รจ creare un nuovo puntatore, non modificare il repository in altri modi. Se inizi con un repository simile a questo:

Repository senza branch

Quindi, crei un branch usando il seguente comando:

git branch crazy-experiment

La cronologia del repository rimane invariata. Tutto ciรฒ che ottieni รจ un nuovo puntatore al commit corrente:

Crea nuovo branch

Nota che questo crea solo il nuovo branch. Per iniziare ad aggiungere commit, devi selezionarlo con git checkout, quindi utilizzare i comandi git add e git commit standard.ย 

Creazione di branch remoti

Finora tutti questi esempi hanno dimostrato le operazioni dei branch locali. Il comando git branch funziona anche sui branch remoti. Per funzionare su branch remoti, un repository remoto deve prima essere configurato e aggiunto alla configurazione del repository locale.

$ git remote add new-remote-repo https://bitbucket.com/user/repo.git
# Add remote repo to local repo config
$ git push <new-remote-repo> crazy-experiment~
# pushes the crazy-experiment branch to new-remote-repo

Questo comando invierร  una copia del crazy-experiment del branch locale al repository remoto remote๏ผž.

Eliminazione dei branch

Una volta che hai finito di lavorare su un branch e ne hai eseguito il merge nella base di codice principale, sei libero di eliminarlo senza perdere alcuna cronologia:

git branch -d crazy-experiment

Tuttavia, se il branch non รจ stato sottoposto a merge, il comando precedente genererร  un messaggio di errore:

error: The branch 'crazy-experiment' is not fully merged. If you are sure you want to delete it, run 'git branch -D crazy-experiment'.

Questo ti protegge dal perdere l'accesso all'intera linea di sviluppo. Se vuoi davvero eliminare il branch (ad esempio se si tratta di un esperimento fallito), puoi usare il flag -D in maiuscolo:

git branch -D crazy-experiment

Questo eliminerร  il branch indipendentemente dal suo stato e senza avvisi, quindi usalo con prudenza.

I comandi precedenti elimineranno una copia locale di un branch. Il branch potrebbe ancora esistere nei repository remoti. Per eliminare un branch remoto, esegui quanto segue.

git push origin --delete crazy-experiment

o

git push origin :crazy-experiment

Questo invierร  un segnale di cancellazione al repository di origine remoto che attiva l'eliminazione del branch remoto crazy-experiment.

Riepilogo

In questo documento abbiamo discusso il comportamento di creazione di branch di Git e il comando git branch. Il comando git branch ti consente di creare, elencare, rinominare ed eliminare i branch. Per operare ulteriormente sui branch risultanti, il comando รจ comunemente usato con altri comandi come git checkout. Scopri di piรน sulle operazioni dei branch git checkout, come cambiare branch ed eseguirne il merge, nella pagina di git checkout.

Rispetto ad altri VCS, le operazioni nei branch di Git sono economiche e vengono utilizzate frequentemente. Questa flessibilitร  consente una potente personalizzazione del flusso di lavoro Git. Per maggiori informazioni sui flussi di lavoro Git, visita le nostre pagine di discussione estese sul flusso di lavoro: Flusso di lavoro Feature Branch, Flusso di lavoro GitFlow e Flusso di lavoro Forking.ย 

Consigliata per te

Blog di Bitbucket

Percorso di apprendimento DevOps

Scopri di piรน su Git

Trova altre guide e risorse su Git in questo hub.