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 е необходим в три сценария: критичен бъг блокира потребителите (срив, загуба на данни), уязвимост в сигурността изисква незабавно затваряне или е счупена критична бизнес логика (плащания, оторизация). Ако бъгът не е критичен — може да бъде коригиран в рамките на обичайния цикъл на пускане чрез 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 чрез директни commits в main (за критични случаи) със задължителен последващ преглед. Този подход изисква висока дисциплина на екипа и надеждни автоматични тестове, тъй като промените попадат в продукционната среда мигновено.
Създаването на hotfix започва с превключване към основния клон и създаване на нов клон с префикс hotfix/. Нека разгледаме процеса стъпка по стъпка на примера за коригиране на критичен бъг в мобилно приложение.
Първа стъпка — превключете към main и се уверете, че клонът е актуален. След това създайте hotfix клон с разбираемо име, отразяващо същността на корекцията.
# Превключете към main и получете последните промени
git checkout main
git pull origin main
# Създайте hotfix клон
git checkout -b hotfix/crash-on-login
След създаване на клона може да се извърши корекцията. Важно: hotfix трябва да съдържа минимален брой промени. Не рефакторирайте кода и не добавяйте нови функционалности — само точкова корекция, която отстранява проблема.
Commit в hotfix трябва да има информативно съобщение, което недвусмислено описва проблема и неговото решение. Формат: тип(област): кратко описание + препратка към задачата в тракера.
# Добавете променените файлове
git add src/ui/login/LoginActivity.kt
# Създайте commit с описание
git commit -m "fix(login): handle null intent on activity resume
Fixes CRASH-142: NullPointerException when LoginActivity
receives onNewIntent after being destroyed by system"
Съобщението на commit-а трябва да съдържа описание на проблема и препратка към задачата. Това улеснява търсенето в историята и помага на колегите да разберат какво е коригирано и защо. За мобилни проекти обикновено се посочва и версията на приложението, в която е открит бъгът.
Последна стъпка — слейте 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 гарантира създаването на commit за сливане, дори ако hotfix може да бъде приложен чрез fast-forward. Това запазва информацията, че е извършена спешна корекция, и улеснява анализа на историята в бъдеще.
Hotfix се различава принципно от feature и release клоновете по цел, живот и правила на сливане. Разбирането на тези различия е критично за правилната организация на Git процесите в екипа.
Feature клонът е предназначен за нова функционалност. Той живее от няколко дни до няколко седмици, създава се от develop и се слива обратно в develop. Feature може да съдържа много commits, включително експериментални, които впоследствие се компресират чрез 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 с последващо Merge чрез Pull Request. В Trunk-based — директен commit в main със задължителен последващ преглед.
Желателно, но е допустим ускорен преглед. За критични бъгове може да се използва механизмът „approve after merge“ — hotfix първо се слива, а прегледът се извършва последващо. Важно е да се фиксира такава процедура в правилата на екипа.
Формат: hotfix/кратко-описание-на-проблема. Например: hotfix/null-pointer-auth, hotfix/crash-on-payment. Името трябва да бъде разбираемо за всички членове на екипа и желателно да съдържа номера на задачата в тракера.
Разрешете конфликта при сливане в develop също както при обикновен merge. Ако конфликтът е значителен — вероятно в develop е имало промени, засягащи същата област. В този случай е важно да се уверите, че корекцията работи правилно с новия код.
Резюме
Ще разработим мобилно приложение под ключ
IT Sectr създава iOS и Android приложения за стартъпи и бизнеси от 2017 г. Ще ви консултираме и ще предложим най-доброто решение.
Прочетете също