Hotfix Branch — este un tip de ramură în Git, destinat remedierii de urgență a erorilor critice în producție. Spre deosebire de ramurile obișnuite, hotfix este creat direct din ramura principală (main/master) și după remediere este fuzionat simultan în main și develop. Potrivit datelor Atlassian, 2025, modelul Git Flow cu ramuri hotfix este utilizat în 67% din echipele care lucrează după un program strict de lansări.
Principalele
Hotfix Branch — este o ramură temporară în Git, care este creată pentru remedierea operativă a defectelor critice în producția activă. Spre deosebire de ramurile feature, care se ramifică din develop și trăiesc câteva zile sau săptămâni, hotfix este creat din main/master și există exact atât cât este necesar pentru remedierea bug-ului.
Sarcina principală a hotfix — minimizarea timpului între detectarea erorii critice și remedierea ei în producție. Echipa nu așteaptă finalizarea sprintului curent sau a ciclului de lansare, ci publică patch-ul imediat. Acest lucru este deosebit de important pentru aplicațiile mobile, unde un bug critic poate bloca utilizatorii și poate duce la pierderea acestora.
Potrivit datelor Google Play Console, timpul mediu de moderare a actualizării în Google Play este de la 2 la 24 de ore. Pentru App Store revizuirea expres poate dura de la 1 la 4 ore. Ramurile hotfix permit pregătirea remedierii chiar înainte de finalizarea moderării și implementarea ei imediat după aprobare.
Procesul hotfix constă din trei pași: crearea ramurii din main, aplicarea remedierii și fuzionarea înapoi în main și develop. Diferența cheie față de o remediere obișnuită — hotfix este întotdeauna fuzionat în ambele ramuri, pentru ca remedierea să nu se piardă la următoarea lansare.
Echipa nu trebuie să adauge în hotfix funcționalități noi sau refactorizări. Doar o remediere punctuală, minim necesară pentru eliminarea problemei critice. Orice abatere de la această regulă crește riscul de regresie și întârzie timpul de lansare a patch-ului.
Hotfix este necesar în trei scenarii: bug-ul critic blochează utilizatorii (crash, pierdere de date), vulnerabilitatea de securitate necesită închidere imediată sau logica de business critică este stricată (plăți, autentificare). Dacă bug-ul nu este critic — poate fi remediat în cadrul ciclului obișnuit de lansare prin develop.
Pentru aplicațiile mobile hotfix poate include și modificări server, dacă arhitectura permite comutarea de la distanță a funcțiilor (feature flags). În acest caz, ramura hotfix poate fi minimă sau poate să nu fie deloc necesară, dacă remedierea se face pe partea de server.
Nu toate modelele de ramificare suportă ramurile hotfix. Git Flow tradițional prevede hotfix ca un tip complet de ramură, iar abordările mai moderne (GitHub Flow, Trunk-based) rezolvă problema remedierilor de urgență altfel.
Git Flow — este singurul model în care hotfix este un tip încorporat de ramură alături de feature și release. În Git Flow hotfix este creat din main, iar după finalizare este fuzionat atât în main (cu tag de versiune), cât și în develop. Aceasta garantează că remedierea nu se va pierde în următoarea lansare.
| Caracteristică | Hotfix în Git Flow | Feature în Git Flow |
|---|---|---|
| Din ce ramură | main | develop |
| Unde se fuzionează | main + develop | develop |
| Durata de viață | ore | zile / săptămâni |
| Conținut | doar remediere bug | funcționalitate nouă |
GitHub Flow nu folosește un tip separat de ramură pentru hotfix. În schimb, dezvoltatorul creează o ramură obișnuită feature din main, aplică remedierea și deschide un Pull Request. După revizuire și verificări CI, ramura este fuzionată în main și implementată imediat. Avantajul — simplitate, dezavantajul — lipsa unui canal separat pentru remedieri urgente.
Trunk-based rezolvă problema hotfix prin commit-uri directe în main (pentru cazuri critice) cu revizuire obligatorie post factum. Această abordare necesită disciplină înaltă a echipei și teste automate fiabile, deoarece modificările ajung în producție instantaneu.
Crearea hotfix începe cu comutarea pe ramura principală și crearea unei ramuri noi cu prefixul hotfix/. Să examinăm procesul pas cu pas pe exemplul remedierii unui bug critic într-o aplicație mobilă.
Primul pas — comutați pe main și asigurați-vă că ramura este actualizată. Apoi creați o ramură hotfix cu un nume clar care reflectă esența remedierii.
# Comutați pe main și obțineți ultimele modificări
git checkout main
git pull origin main
# Creați o ramură hotfix
git checkout -b hotfix/crash-on-login
După crearea ramurii se poate aplica remedierea. Important: hotfix trebuie să conțină un număr minim de modificări. Nu trebuie să refactorizați codul sau să adăugați funcționalități noi — doar remedierea punctuală care elimină problema.
Commit-ul în hotfix trebuie să aibă un mesaj informativ care descrie fără ambiguitate problema și soluția ei. Format: tip(domeniu): descriere scurtă + link către sarcina din tracker.
# Adăugați fișierele modificate
git add src/ui/login/LoginActivity.kt
# Creați un commit cu descriere
git commit -m "fix(login): handle null intent on activity resume
Fixes CRASH-142: NullPointerException when LoginActivity
receives onNewIntent after being destroyed by system"
Mesajul commit-ului trebuie să conțină descrierea problemei și link către sarcină. Aceasta simplifică căutarea în istoric și ajută colegii să înțeleagă ce a fost remediat și de ce. Pentru proiectele mobile se indică de obicei și versiunea aplicației în care a fost descoperit bug-ul.
Pasul final — fuzionați hotfix înapoi în main (cu tag-ul noii versiuni patch) și în develop (pentru ca remedierea să se păstreze în următoarea lansare). Mai întâi se creează fuzionarea în main cu tag, apoi fuzionarea în develop.
# Fuzionați în main și creați un tag
git checkout main
git merge --no-ff hotfix/crash-on-login
git tag -a v2.3.1 -m "Hotfix: crash on login"
# Fuzionați în develop
git checkout develop
git merge --no-ff hotfix/crash-on-login
# Trimiteți modificările pe server
git push origin main --tags
git push origin develop
Flag-ul --no-ff garantează crearea unui commit de fuzionare, chiar dacă hotfix ar putea fi aplicat prin fast-forward. Aceasta păstrează informația că a fost efectuată o remediere de urgență și simplifică analiza istoricului în viitor.
Hotfix se deosebește fundamental de ramurile feature și release prin scop, durata de viață și regulile de fuzionare. Înțelegerea acestor diferențe este esențială pentru organizarea corectă a proceselor Git în echipă.
Ramura feature este destinată funcționalității noi. Trăiește de la câteva zile la câteva săptămâni, este creată din develop și fuzionată înapoi în develop. Feature poate conține multe commit-uri, inclusiv experimentale, care ulterior sunt comprimate prin squash sau rebase.
Ramura release pregătește lansarea pentru publicare. Este creată din develop, în ea se remediază bug-urile găsite în procesul de stabilizare și nu acceptă funcționalități noi. După finalizare, release este fuzionată în main (cu tag) și develop.
Hotfix însă este creat și fuzionat direct cu main, ocolind develop (deși după remediere se sincronizează și cu develop). Conține un număr minim de modificări și există pentru un timp minim. Dacă feature sau release pot fi amânate până la următorul ciclu, hotfix — nu.
Pentru dezvoltarea mobilă această diferență este deosebit de importantă: App Store și Google Play permit lansarea versiunilor patch separat de lansările principale. Ramura hotfix asigură un proces în care lansarea patch-ului nu se amestecă cu funcțiile neterminate.
Erorile la lucrul cu hotfix pot anula avantajele remedierii de urgență. Să examinăm cinci probleme frecvente care apar în echipele care folosesc Git Flow.
Fiecare dintre aceste erori duce la întârzierea lansării patch-ului sau la apariția unor noi probleme în producție. Echipele ar trebui să stabilească reguli de lucru cu hotfix în CONTRIBUTING.md și să le automatizeze prin verificări CI/CD.
Întrebări frecvente
Hotfix remediază o eroare critică în producție și este creat din main, în timp ce o remediere obișnuită de bug remediază o eroare în develop și va fi inclusă în următoarea lansare planificată. Hotfix necesită lansarea imediată a unei versiuni patch.
Da, hotfix poate fi creat în orice model de ramificare. În GitHub Flow pentru aceasta se folosește o ramură feature obișnuită din main cu Merge ulterior prin Pull Request. În Trunk-based — commit direct în main cu revizuire obligatorie post factum.
De dorit, dar este admisibilă o revizuire accelerată. Pentru bug-uri critice se poate folosi mecanismul „approve after merge” — hotfix este mai întâi fuzionat, iar revizuirea se efectuează post factum. Important este să se stabilească o astfel de procedură în regulile echipei.
Format: hotfix/descriere-scurtă-a-problemei. De exemplu: hotfix/null-pointer-auth, hotfix/crash-on-payment. Numele trebuie să fie clar pentru toți membrii echipei și de preferat să conțină numărul sarcinii din tracker.
Rezolvați conflictul la fuzionarea în develop la fel ca la un merge obișnuit. Dacă conflictul este semnificativ — probabil că în develop au fost modificări care afectează aceeași zonă. În acest caz, este important să vă asigurați că remedierea funcționează corect cu noul cod.
Concluzii
Vom dezvolta o aplicație mobilă la cheie
IT Sectr creează aplicații iOS și Android pentru startup-uri și afaceri din 2017. Vă vom consilia și vă vom propune cea mai bună soluție.
Citiți și