Hotfix Branch — то је тип гране у Git-у, намењен за хитно исправљање критичних грешака у продукцији. За разлику од обичних грана, hotfix се креира директно из главне гране (main/master) и након исправке спаја се истовремено у main и develop. Према подацима Atlassian, 2025, модел Git Flow са hotfix гранама користи се у 67% тимова који раде по строгом распореду издања.
Главно
Hotfix Branch — то је привремена грана у Git-у, која се креира за оперативно исправљање критичних дефеката у радној продукцији. За разлику од feature грана, које се одвајају од develop и живе неколико дана или недеља, hotfix се креира из main/master и постоји тачно онолико колико је потребно за исправку бага.
Основни задатак hotfix-а — минимизација времена између откривања критичне грешке и њеног исправљања у продукцији. Тим не чека завршетак текућег спринта или циклуса издања, већ објављује закрпу одмах. Ово је посебно важно за мобилне апликације, где критични баг може да блокира кориснике и доведе до одлива.
Према подацима Google Play Console, просечно време модерирања ажурирања у Google Play-у је од 2 до 24 сата. За App Store експресни преглед може да потраје од 1 до 4 сата. Hotfix гране омогућавају припрему исправке и пре завршетка модерирања и објављивање одмах након одобрења.
Процес hotfix састоји се од три корака: креирање гране из main, уношење исправке и спајање назад у main и develop. Кључна разлика од обичне поправке — hotfix се увек спаја у обе гране, како исправка не би била изгубљена при следећем издању.
Тим не треба да уноси у hotfix нову функционалност или рефакторисање. Само тачкаста исправка, минимално потребна за отклањање критичног проблема. Свако одступање од овог правила повећава ризик од регресије и продужава време објављивања закрпе.
Hotfix је потребан у три сценарија: критични баг блокира кориснике (crash, губитак података), безбедносна рањивост захтева хитно затварање или је покварена критична пословна логика (плаћања, ауторизација). Ако баг није критичан — може се исправити у оквиру редовног циклуса издања кроз develop.
За мобилне апликације hotfix такође може да укључи серверске промене, ако архитектура омогућава даљинско пребацивање функција (feature flags). У том случају, hotfix грана може бити минимална или уопште није потребна ако се исправка ради на серверској страни.
Не подржавају сви модели гранања hotfix гране. Традиционални Git Flow предвиђа hotfix као пуноправни тип гране, док савременији приступи (GitHub Flow, Trunk-based) решавају задатак хитних поправки другачије.
Git Flow — једини модел у коме је hotfix уграђени тип гране уз feature и release. У Git Flow-у hotfix се креира из main, а након завршетка спаја се и у main (са ознаком верзије) и у develop. Ово гарантује да исправка неће бити изгубљена у следећем издању.
| Карактеристика | Hotfix у Git Flow | Feature у Git Flow |
|---|---|---|
| Из које гране | main | develop |
| Где се спаја | main + develop | develop |
| Животни век | сати | дани / недеље |
| Садржај | само исправка бага | нова функционалност |
GitHub Flow не користи посебан тип гране за hotfix. Уместо тога, програмер креира обичну feature грану из main, уноси исправку и отвара Pull Request. Након прегледа и CI провера, грана се спаја у main и одмах поставља. Предност — једноставност, недостатак — недостатак посебног канала за хитне поправке.
Trunk-based развој решава задатак hotfix-а кроз директне комитове у main (за критичне случајеве) са обавезним прегледом након чињенице. Овај приступ захтева високу дисциплину тима и поуздане аутоматске тестове, јер промене стижу у продукцију тренутно.
Креирање hotfix почиње преласком на главну грану и креирањем нове гране са префиксом hotfix/. Размотримо процес корак по корак на примеру исправке критичног бага у мобилној апликацији.
Први корак — пређите на main и уверите се да је грана ажурна. Затим креирајте hotfix грану са разумљивим именом које одражава суштину поправке.
# Пређите на main и преузмите последње измене
git checkout main
git pull origin main
# Креирајте hotfix грану
git checkout -b hotfix/crash-on-login
Након креирања гране може се унети исправка. Важно: hotfix треба да садржи минималан број измена. Не треба рефакторисати код или додавати нове могућности — само тачкаста исправка која отклања проблем.
Комит у hotfix-у треба да има информативну поруку која недвосмислено описује проблем и његово решење. Формат: тип(област): кратак опис + веза до задатка у тракеру.
# Додајте измењене датотеке
git add src/ui/login/LoginActivity.kt
# Креирајте комит са описом
git commit -m "fix(login): handle null intent on activity resume
Fixes CRASH-142: NullPointerException when LoginActivity
receives onNewIntent after being destroyed by system"
Порука комита треба да садржи опис проблема и везу до задатка. Ово поједностављује претрагу у историји и помаже колегама да разумеју шта је поправљено и зашто. За мобилне пројекте обично се наводи и верзија апликације у којој је пронађен баг.
Завршни корак — спојите hotfix назад у main (са ознаком нове верзије закрпе) и у develop (како би се исправка сачувала у следећем издању). Прво се креира спајање у main са ознаком, затим спајање у develop.
# Спојите у main и креирајте ознаку
git checkout main
git merge --no-ff hotfix/crash-on-login
git tag -a v2.3.1 -m "Hotfix: crash on login"
# Спојите у develop
git checkout develop
git merge --no-ff hotfix/crash-on-login
# Пошаљите измене на сервер
git push origin main --tags
git push origin develop
Заставица --no-ff гарантује креирање комита спајања, чак и ако би се hotfix могао применити кроз fast-forward. Ово чува информацију да је извршена хитна поправка и поједностављује анализу историје у будућности.
Hotfix се суштински разликује од feature и release грана по циљу, животном веку и правилима спајања. Разумевање ових разлика је критично за правилну организацију Git процеса у тиму.
Feature грана је намењена за нову функционалност. Живи од неколико дана до неколико недеља, креира се из develop и спаја назад у develop. Feature може да садржи много комитова, укључујући експерименталне, који се касније сажимају кроз squash или rebase.
Release грана припрема издање за објављивање. Креира се из develop, у њој се исправљају багови пронађени током стабилизације и не прима нову функционалност. Након завршетка release се спаја у main (са ознаком) и develop.
Hotfix се креира и спаја директно са main, заобилазећи develop (иако се након исправке синхронизује и са develop). Садржи минималан број измена и постоји минимално време. Ако feature или release могу бити одложени до следећег циклуса, hotfix — не може.
За мобилни развој ова разлика је посебно важна: App Store и Google Play омогућавају објављивање верзија закрпа одвојено од главних издања. Hotfix грана обезбеђује процес у коме се издање закрпе не меша са незавршеним функцијама.
Грешке при раду са hotfix могу да пониште предности хитне поправке. Размотримо пет најчешћих проблема који се јављају у тимовима који користе Git Flow.
Свака од ових грешака доводи до кашњења у објављивању закрпе или до појаве нових проблема у продукцији. Тимови треба да утврде правила рада са hotfix у CONTRIBUTING.md и аутоматизују их кроз CI/CD провере.
Често постављана питања
Hotfix исправља критичну грешку у продукцији и креира се из main, док обична поправка бага исправља грешку у develop и биће укључена у следеће планирано издање. Hotfix захтева хитно објављивање верзије закрпе.
Да, hotfix се може креирати у било ком моделу гранања. У GitHub Flow-у се за то користи обична feature грана из main са накнадним спајањем кроз Pull Request. У Trunk-based-у — директни комит у main са обавезним прегледом након чињенице.
Пожељно, али је дозвољен убрзани преглед. За критичне багове може се користити механизам „approve after merge” — hotfix се прво спаја, а преглед се обавља након чињенице. Важно је утврдити такав редослед у правилима тима.
Формат: hotfix/кратак-опис-проблема. На пример: hotfix/null-pointer-auth, hotfix/crash-on-payment. Име треба да буде разумљиво свим члановима тима и пожељно је да садржи број задатка у тракеру.
Решите конфликт при спајању у develop исто као при обичном merge-у. Ако је конфликт значајан — могуће је да су у develop-у биле промене које утичу на исту област. У овом случају важно је уверити се да исправка исправно ради са новим кодом.
Резиме
Развићемо мобилну апликацију под кључ
IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.
Прочитајте такође