Git è un modo fantastico per implementare il controllo di versione in un progetto di codifica – così fantastico, in effetti, che è quasi un’opzione obbligatoria.

L’idea è quella di creare branch duplicati del repository principale, lavorare sul codice e poi unificare le modifiche al resto. Questo significa che avrete molti branch vecchi all’interno del repo. Anche se le dimensioni dei file sono spesso ridotte, vorrete comunque eseguire un git delete su un branch locale per mantenere tutto in ordine.

La buona notizia è che questa operazione non richiede molto sforzo. Tuttavia, dovrete considerare l’approccio migliore a seconda che unifichiate o meno le modifiche, nonché cosa fare se si verifica un errore durante il processo di cancellazione. Potreste anche dover ripristinare un branch eliminato. Ognuno di questi scenari richiede competenze e comandi diversi.

In questo tutorial mostreremo come eseguire un git delete su un branch locale. Prima, però, parleremo di alcuni dei motivi per cui potreste voler eliminare i branch locali in Git.

Cos’è un branch Git?

I repository Git sono una raccolta di branch – duplicati del codice principale. In effetti, non è possibile avere un repo Git funzionante senza un branch.

Spesso si avrà un repo principale (i nomi nominali sono “main” e “trunk”). Questo conterrà il codice di produzione funzionante che non vorrete modificare. Al contrario, creerete un branch duplicato del repo principale e apporterete le modifiche necessarie all’interno del vostro branch. Quando sarà il momento di riportare le modifiche nel codice principale, potrete effettuare gli ultimi controlli prima di unirle.

I branch permettono a tutti i membri di un team di collaborare allo stesso progetto, indipendentemente l’uno dall’altro. Inoltre, non c’è il rischio di modificare il codice funzionante o di intervenire su altre modifiche nel frattempo.

Tuttavia, prima o poi sarà anche necessario eseguire un git delete su un branch locale. Si tratta di un’azione che eseguirete regolarmente e ci sono diversi motivi per farlo.

Perché rimuovere i branch in Git?

Il codice di produzione si trova nel branch principale. Questo è l’unico branch che ha una certa permanenza.

Al contrario, quasi tutti gli altri branch avranno una durata temporanea. Una volta completato il lavoro, eseguirete il commit delle modifiche e poi cercherete di unirle al branch principale, eventualmente in un repo online come GitHub.

Questo significa che spesso avrete molti branch aperti contemporaneamente, a seconda del progetto e del team. Tuttavia, una volta completata la fusione, questi branch non scompariranno automaticamente.

Per questo motivo, ci sono alcuni motivi per cui potreste voler eliminare un branch Git locale:

  • Pulizie generali: A casa, quando si finisce di cucinare, si lavano gli utensili e si mettono via. Lo stesso vale per chi lavora con un repo Git: quando si finisce di lavorare, si uniscono le modifiche e si cancellano i branch che non servono più. In questo modo il progetto e il repo sono più facili da navigare.
  • Dimensione dei file del repository: Anche se i repository Git sono spesso abbastanza piccoli da non pesare sulle dimensioni di un progetto, dovreste comunque tenerli d’occhio. Uno dei modi per ridurre le dimensioni di un repo è quello di eliminare i branch che non servono.
  • Prestazioni potenziali: Anche se il codice principale è performante, un branch potrebbe non esserlo, visto che ci state lavorando. Per questo motivo, vorrete ridurre al minimo i branch aperti. In caso contrario, il vostro team potrebbe avere problemi di prestazioni fino a quando non si passa il progetto in staging per poi modificarlo.

Come vedrete più avanti, l’esecuzione di git delete su un branch locale è semplice, per la maggior parte. Tuttavia, è bene capire cosa succede dietro le quinte quando si usa questo comando, perché non cancellerà proprio tutto ciò che riguarda il branch dal vostro repo.

Cosa succede quando si cancella un branch Git locale?

A livello tecnico, un branch è solo un puntatore a un commit specifico – una sezione di codice che volete includere nel branch principale. Per questo motivo, quando si elimina un branch Git locale, i commit non vengono eliminati.

Più avanti parleremo del recupero dei branch e di ciò che è possibile fare grazie ai commit che rimangono nel repo. Per ora, sappiate che esistono due tipi diversi di modifiche:

  • Modifiche unificate: Una volta unito un branch a quello principale, il codice sarà il più aggiornato possibile. In termini tecnici, questo equivale a spostare il riferimento del branch principale per raggiungere il branch secondario.
  • Modifiche non unificate: Se non unificate le modifiche, avrete un branch non aggiornato come quello principale. Di conseguenza, il branch principale non avrà un commit di riferimento aggiornato.

Questo è un aspetto di cui parleremo più dettagliatamente in seguito. Ad ogni modo, questo punto ci fa riflettere su quando eliminare i branch.

Quando eseguire un “Git Delete” su un branch locale

Visti i rischi di cancellare un branch con modifiche non ancora unificate, è importante non eseguire un git delete su un branch locale prima di aver effettuato una fusione del codice. In questo modo, ogni branch avrà un riferimento aggiornato e, di conseguenza, il codice più recente disponibile.

È anche una buona idea assicurarsi di non aver bisogno di nessuno dei commit all’interno di un branch temporaneo prima di eseguire un git delete. Sebbene sia possibile recuperare i branch in una certa misura, si tratta di un lavoro che non vorrete eseguire quando sarete costretti a farlo. Ve lo spiegheremo meglio in seguito.

Come eseguire un “Git Delete” su un branch locale

Nel resto di questo tutorial, vi mostreremo come eseguire un git delete su un branch locale. Parleremo anche di cosa fare con le modifiche non unificate.

Poi parleremo degli errori che si potrebbero riscontrare e di come ripristinare un branch locale cancellato.

Infine, daremo una breve occhiata ai branch remoti e a come cancellarli.

Prerequisiti

Git offre di per sé una serie di comandi semplici, oltre a fornire molte risorse, senza la necessità di dover passare ore a studiare. È bene tenere presente, però, che ci sono diversi modi per accedere a un repo Git, a seconda dell’applicazione e dell’editor di codice che avete scelto.

Sebbene possiate trovare un’impostazione “minimalista” all’interno di un’interfaccia grafica dedicata (GUI) come GitKraken o Sublime Merge, noi ci limiteremo a mantenere le cose semplici e a utilizzare gli strumenti integrati nel sistema operativo.

Per seguirci, avrete bisogno di quanto segue:

  • Accesso alla riga di comando: I nostri esempi utilizzeranno macOS e iTerm. Tuttavia, potete usare Cmder per Windows, il Terminale predefinito su macOS, lo stesso su Linux e altri ancora.
  • Accesso ai file specifici: Dovrete avere i file del progetto sul vostro computer locale, perché senza quelli non potremo fare nulla!
  • Conoscenza della riga di comando: È utile avere una certa conoscenza della riga di comando, in particolare dei comandi che aiutano a navigare tra i file e a capire come funziona la riga di comando.

In realtà, se avete un progetto con un repo Git e una finestra di Terminale a vostra scelta, avete già tutto quello che ci serve.

Eseguire un “Git Delete” di base

Per prima cosa, supponiamo che vogliate eliminare un branch con le modifiche unificate. Questa è la pratica più semplice e comune.

Tuttavia, potrebbe essere necessario eseguire git branch -a o git branch --list per visualizzare tutti i branch e trovare quello giusto nel vostro repo:

Una finestra parziale del Terminale con sfondo sfumato macOS, che mostra all'utente l'elenco dei branch correnti in un repository locale.
Elenco dei branch in un repository Git locale.

Ecco il comando che vi servirà per eliminare un branch:

git branch -d branch-name

Dovrete utilizzare il nome specifico del branch anziché il nostro segnaposto.

Il flag -d sta per “cancella” e, con la forma minuscola, avrete una certa protezione contro l’eliminazione di un branch con modifiche non unificate.

Se provate a cancellare un branch non unificato, vedrete un errore (in realtà è più un avvertimento):

Una finestra parziale di Terminal su macOS, con uno sfondo sfumato. L'utente esegue un comando per eliminare un branch, ma appare un errore che recita:
Tentativo di eliminare un branch con modifiche non unificate in un repository Git.

Tuttavia, è possibile scrivere il flag con la maiuscola usando -D e saltare l’avviso di protezione. In questo modo potrete eliminare un branch con modifiche non unificate.

È bene notare che non si riceverà alcuna richiesta di conferma di eliminazione del branch se si utilizza la versione maiuscola, quindi è un flag da utilizzare con attenzione.

Cosa causa l’errore “Cannot Delete Branch”?

Poiché l’eliminazione di un branch del repo è una decisione importante da cui non si torna indietro facilmente, Git genera degli errori se si fanno delle mosse sbagliate.

Per esempio, a volte vi capiterà di andare a fare un git delete su un branch locale e di visualizzare un errore “Impossibile eliminare il branch”:

Una finestra parziale del Terminale con uno sfondo macOS sfumato. L'utente sta elencando i branch attuali del repo, ne sta controllando uno e poi sta cercando di cancellarlo, ottenendo un errore. Si legge:
Errore durante il tentativo di eliminare un branch all’interno di un repo Git.

Questo dipende dalla vostra posizione attuale all’interno del repo Git. Non è possibile eliminare un branch che avete “controllato”.

La soluzione è spostarsi in un altro branch.

Per questo motivo, vi consigliamo sempre di fare il checkout nel branch main. In questo modo otterrete un errore se provate a cancellare main e potrete anche cancellare qualsiasi altro branch del repo.

Come ripristinare un branch Git locale eliminato

Dato che un commit rimane anche dopo l’eliminazione di un branch locale, c’è una piccola possibilità di recuperare un branch dopo aver eseguito un git delete. Tuttavia, è più complicato che unificare prima le modifiche. In questa situazione, saprete già che non avrete più bisogno di un branch.

Ogni commit utilizza un numero hash che funge da riferimento. Potete usare questo hash per fare il checkout e creare un nuovo branch:

Una finestra parziale del Terminale in macOS che mostra un utente che esegue i comandi
Versione breve e lunga di un hash di riferimento per un commit in Git.

Tuttavia, se non conoscete l’hash di un branch cancellato, potete utilizzare il comando reflog. Questi “log di riferimento” sono molto simili a quelli che si trovano in applicazioni come DevKinsta.

Sebbene l’uso di git reflog sia un argomento da trattare in un altro articolo, potrete utilizzare la funzionalità di base per trovare l’hash dei vecchi commit. Se eseguite git reflog, vedrete un elenco di commit:

Una finestra parziale del Terminale in macOS che mostra l'utente che esegue un comando
Una finestra del Terminale che esegue un comando git reflog e ne mostra i risultati.

La prima colonna di hash permette di eseguire il checkout del commit e di creare un nuovo branch. Ad esempio:

git checkout 5744ff6
git branch f9d2db5

Tuttavia, questo non è un modo infallibile per recuperare un branch cancellato in Git.

In alcuni casi, non ci sarà nessun commit nel reflog e nessun riferimento HEAD al commit stesso. Per questo motivo è meglio lavorare con i branch in modo più sicuro unificando le modifiche prima di eseguire un git delete su un branch locale.

Lavorare con i branch Git remoti

Quando si esegue un git delete su un branch locale, si avrà spesso un repo remoto associato. Questo è particolarmente vero se il vostro sito viene scaricato su Kinsta utilizzando Git.

Questo non si aggiornerà insieme al vostro repo locale quando apporterete delle modifiche, e ciò vale anche per l’eliminazione di un branch locale.
Tuttavia, sia GitHub che GitLab hanno lo stesso processo per eliminare un branch Git remoto. Si tratta di un approccio simile a quello di qualsiasi altro push “upstream”

Ecco il comando:

git push remote-name -d remote-branch

Per remote-name, la maggior parte dei repo che vediamo usa “origin”. Il riferimento a remote-branch sarà lo stesso del branch locale (a meno che non rinominiate un branch locale, cosa che va oltre lo scopo di questo articolo)

A parte questo, potrete vedere tutti i branch – sia locali che remoti – usando git branch -a. Se desiderate visualizzare solo i branch remoti, potete usare git branch -r.

Una volta eseguito il comando, vedrete un messaggio di conferma; a quel punto dovrete eseguire nuovamente git branch -a per verificare che tutto sia stato rimosso come previsto.

Riepilogo

Git è uno dei pochi strumenti che offre un’immensa potenza “sotto il cofano” grazie a comandi leggibili e intuitivi. Questo vale anche per la rimozione dei branch che non vi servono più sul vostro computer locale. Tuttavia, dovrete fare attenzione a eseguire un git delete su un branch locale.

Infatti, se provate a cancellare le modifiche non ancora cancellate, otterrete un errore o rimuoverete qualcosa che avrà un impatto sul lavoro futuro sul vostro progetto. Inoltre, dovrete cancellare anche il branch remoto. Sia il repository locale che quello remoto necessitano di una buona manutenzione per mantenere le prestazioni elevate e le dimensioni dei file al minimo.

Capita di cancellare per errore un branch Git, ma Kinsta non vi lascia mai soli e vi copre le spalle per quanto riguarda l’Hosting di Applicazioni. La piattaforma di hosting di Kinsta vi dà la possibilità di connettervi e distribuire i vostri repository GitHub in pochi minuti. Inoltre, avrete accesso alle macchine C2 e alla rete Premium Tier di Google, oltre alla nostra integrazione con Cloudflare, per portare le vostre app a un livello superiore di velocità e sicurezza.