Hotfix Branch è un tipo di branch in Git progettato per la correzione urgente di errori critici in produzione. A differenza dei branch normali, un hotfix viene creato direttamente dal branch principale (main/master) e, dopo la correzione, viene unito sia in main che in develop contemporaneamente. Secondo Atlassian, 2025, il modello Git Flow con branch hotfix è utilizzato dal 67% dei team che lavorano con rigide regole di rilascio.
Punti chiave
Hotfix Branch è un branch temporaneo in Git creato per correggere rapidamente difetti critici in un ambiente di produzione attivo. A differenza dei branch feature, che si diramano da develop e vivono per diversi giorni o settimane, un hotfix viene creato da main/master ed esiste esattamente per il tempo necessario a correggere il bug.
L'obiettivo principale di un hotfix è minimizzare il tempo tra la scoperta di un errore critico e la sua correzione in produzione. Il team non attende la fine dello sprint corrente o del ciclo di rilascio, ma pubblica una patch immediatamente. Questo è particolarmente importante per le applicazioni mobili, dove un bug critico può bloccare gli utenti e portare all'abbandono.
Secondo Google Play Console, il tempo medio di revisione di un aggiornamento in Google Play va da 2 a 24 ore. Per l'App Store, la revisione espressa può richiedere da 1 a 4 ore. I branch hotfix consentono di preparare la correzione prima che la moderazione sia completata e di pubblicarla immediatamente dopo l'approvazione.
Il processo di hotfix consiste in tre passaggi: creare un branch da main, effettuare la correzione e unire di nuovo in main e develop. La differenza fondamentale rispetto a una correzione normale è che un hotfix viene sempre unito in entrambi i branch, in modo che la correzione non venga persa nel rilascio successivo.
Il team non deve introdurre nuove funzionalità o refactoring in un hotfix. Solo una correzione mirata, minimamente necessaria per risolvere il problema critico. Qualsiasi deviazione da questa regola aumenta il rischio di regressione e ritarda la pubblicazione della patch.
Un hotfix è necessario in tre scenari: un bug critico blocca gli utenti (crash, perdita di dati), una vulnerabilità di sicurezza richiede una chiusura immediata, o la logica di business critica è danneggiata (pagamenti, autenticazione). Se il bug non è critico, può essere corretto nel normale ciclo di rilascio tramite develop.
Per le applicazioni mobili, un hotfix può includere anche modifiche lato server se l'architettura consente l'attivazione remota delle funzionalità (feature flags). In questo caso, il branch hotfix può essere minimo o non necessario se la correzione può essere effettuata lato server.
Non tutti i modelli di branching supportano i branch hotfix. Il Git Flow tradizionale include l'hotfix come tipo di branch a tutti gli effetti, mentre gli approcci più moderni (GitHub Flow, Trunk-based) gestiscono le correzioni urgenti in modo diverso.
Git Flow è l'unico modello in cui l'hotfix è un tipo di branch integrato insieme a feature e release. In Git Flow, un hotfix viene creato da main e, al completamento, viene unito sia in main (con un tag di versione) che in develop. Questo garantisce che la correzione non venga persa nel rilascio successivo.
| Caratteristica | Hotfix in Git Flow | Feature in Git Flow |
|---|---|---|
| Da quale branch | main | develop |
| Dove viene unito | main + develop | develop |
| Durata | ore | giorni / settimane |
| Contenuto | solo correzione bug | nuova funzionalità |
GitHub Flow non utilizza un tipo di branch separato per gli hotfix. Invece, lo sviluppatore crea un branch feature normale da main, effettua la correzione e apre una Pull Request. Dopo la revisione e i controlli CI, il branch viene unito in main e distribuito immediatamente. Il vantaggio è la semplicità, lo svantaggio è l'assenza di un canale dedicato per le correzioni urgenti.
Lo sviluppo Trunk-based gestisce gli hotfix tramite commit diretti in main (per i casi critici) con revisione obbligatoria successiva. Questo approccio richiede un'elevata disciplina del team e test automatizzati affidabili, poiché le modifiche vanno in produzione istantaneamente.
Creare un hotfix inizia passando al branch principale e creando un nuovo branch con il prefisso hotfix/. Esaminiamo il processo passo dopo passo con l'esempio della correzione di un bug critico in un'applicazione mobile.
Primo passo — passare a main e assicurarsi che il branch sia aggiornato. Quindi creare un branch hotfix con un nome chiaro che rifletta la natura della correzione.
# Passare a main e ottenere le ultime modifiche
git checkout main
git pull origin main
# Creare un branch hotfix
git checkout -b hotfix/crash-on-login
Dopo aver creato il branch, è possibile effettuare la correzione. È importante ricordare: un hotfix deve contenere un numero minimo di modifiche. Non rifattorizzare il codice né aggiungere nuove funzionalità — solo la correzione mirata che risolve il problema.
Il commit in un hotfix deve avere un messaggio informativo che descriva chiaramente il problema e la sua soluzione. Formato: tipo(ambito): descrizione breve + link al task nel tracker.
# Aggiungere i file modificati
git add src/ui/login/LoginActivity.kt
# Creare un commit con descrizione
git commit -m "fix(login): handle null intent on activity resume
Fixes CRASH-142: NullPointerException when LoginActivity
receives onNewIntent after being destroyed by system"
Il messaggio di commit deve contenere una descrizione del problema e un link al task. Questo semplifica la ricerca nella cronologia e aiuta i colleghi a capire cosa è stato corretto e perché. Per i progetti mobili, è anche comune includere la versione dell'applicazione in cui è stato trovato il bug.
Il passaggio finale è unire l'hotfix di nuovo in main (con un tag di nuova versione patch) e in develop (in modo che la correzione sia preservata nel prossimo rilascio). Prima unire in main con un tag, poi unire in develop.
# Unire in main e creare un tag
git checkout main
git merge --no-ff hotfix/crash-on-login
git tag -a v2.3.1 -m "Hotfix: crash on login"
# Unire in develop
git checkout develop
git merge --no-ff hotfix/crash-on-login
# Inviare le modifiche al server
git push origin main --tags
git push origin develop
Il flag --no-ff garantisce la creazione di un commit di unione, anche se l'hotfix avrebbe potuto essere applicato tramite fast-forward. Questo preserva l'informazione che è stata effettuata una correzione d'emergenza e semplifica l'analisi della cronologia in futuro.
Un hotfix è fondamentalmente diverso dai branch feature e release per scopo, durata e regole di unione. Comprendere queste differenze è fondamentale per organizzare correttamente i processi Git in un team.
Un branch feature è destinato a nuove funzionalità. Vive da diversi giorni a diverse settimane, viene creato da develop e unito di nuovo in develop. Una feature può contenere molti commit, inclusi quelli sperimentali, che vengono successivamente compressi tramite squash o rebase.
Un branch release prepara un rilascio per la distribuzione. Viene creato da develop, in esso vengono corretti i bug trovati durante la stabilizzazione e non accetta nuove funzionalità. Al completamento, il release viene unito in main (con tag) e develop.
Un hotfix, d'altra parte, viene creato e unito direttamente con main, bypassando develop (sebbene dopo la correzione venga sincronizzato anche con develop). Contiene un numero minimo di modifiche ed esiste per un tempo minimo. Mentre i branch feature o release possono essere rimandati al ciclo successivo, un hotfix non può.
Per lo sviluppo mobile, questa distinzione è particolarmente importante: l'App Store e Google Play consentono di pubblicare versioni patch separatamente dai rilasci principali. Il branch hotfix garantisce che un rilascio patch non venga mescolato con funzionalità non completate.
Errori quando si lavora con gli hotfix possono annullare i vantaggi della correzione d'emergenza. Esaminiamo i cinque problemi più comuni che sorgono nei team che utilizzano Git Flow.
Ciascuno di questi errori porta a un ritardo nella pubblicazione della patch o alla comparsa di nuovi problemi in produzione. I team dovrebbero documentare le regole di lavoro con gli hotfix in CONTRIBUTING.md e automatizzarle attraverso i controlli CI/CD.
Domande frequenti
Un hotfix corregge un errore critico in produzione e viene creato da main, mentre una correzione di bug normale corregge un errore in develop e sarà inclusa nel prossimo rilascio pianificato. Un hotfix richiede la pubblicazione immediata di una versione patch.
Sì, un hotfix può essere creato in qualsiasi modello di branching. In GitHub Flow, si usa un branch feature normale da main con unione tramite Pull Request. In Trunk-based — un commit diretto in main con revisione obbligatoria successiva.
Raccomandabile, ma una revisione accelerata è accettabile. Per i bug critici, è possibile utilizzare il meccanismo “approve after merge” — l'hotfix viene unito prima e la revisione viene effettuata successivamente. L'importante è documentare questa procedura nelle regole del team.
Formato: hotfix/descrizione-breve-del-problema. Ad esempio: hotfix/null-pointer-auth, hotfix/crash-on-payment. Il nome dovrebbe essere comprensibile a tutti i membri del team e idealmente contenere il numero del task nel tracker.
Risolvere il conflitto quando si unisce in develop come per un'unione normale. Se il conflitto è significativo, potrebbero esserci state modifiche in develop che interessano la stessa area. In questo caso, è importante assicurarsi che la correzione funzioni correttamente con il nuovo codice.
Riepilogo
Svilupperemo un'applicazione mobile chiavi in mano
IT Sectr crea applicazioni iOS e Android per startup e aziende dal 2017. Ti consulteremo e ti proporremo la soluzione migliore.
Leggi anche