Hotfix Branch — är en typ av gren i Git, avsedd för akut korrigering av kritiska fel i produktionsmiljön. Till skillnad från vanliga grenar skapas hotfix direkt från huvudgrenen (main/master) och efter korrigering slås den samtidigt samman med main och develop. Enligt data från Atlassian, 2025 används Git Flow-modellen med hotfix-grenar i 67% av teamen som arbetar enligt strikt releaseschema.
Huvudpunkter
Hotfix Branch — är en tillfällig gren i Git, som skapas för operativ korrigering av kritiska defekter i aktiv produktion. Till skillnad från feature-grenar, som förgrenar sig från develop och lever flera dagar eller veckor, skapas hotfix från main/master och existerar exakt så länge som behövs för att korrigera buggen.
Huvuduppgiften för hotfix — minimera tiden mellan upptäckt av ett kritiskt fel och dess korrigering i produktion. Teamet väntar inte på att den aktuella sprinten eller releasecykeln ska slutföras, utan släpper en patch omedelbart. Detta är särskilt viktigt för mobilapplikationer, där en kritisk bugg kan blockera användare och leda till användarförlust.
Enligt data från Google Play Console är den genomsnittliga modereringstiden för en uppdatering i Google Play 2 till 24 timmar. För App Store kan en expressgranskning ta 1 till 4 timmar. Hotfix-grenar gör det möjligt att förbereda korrigeringen redan innan modereringen är klar och lansera den omedelbart efter godkännande.
Hotfix-processen består av tre steg: skapa gren från main, utföra korrigering och sammanfoga tillbaka till main och develop. Den viktigaste skillnaden från en vanlig korrigering — hotfix slås alltid samman med båda grenarna, så att korrigeringen inte går förlorad vid nästa release.
Teamet bör inte lägga till ny funktionalitet eller refaktorisering i hotfix. Endast punktkorrigering, minimalt nödvändig för att eliminera det kritiska problemet. Varje avvikelse från denna regel ökar risken för regression och förlänger tiden för patch-utgåvan.
Hotfix behövs i tre scenarier: kritisk bugg blockerar användare (krasch, dataförlust), säkerhetslucka kräver omedelbar stängning eller kritisk affärslogik är trasig (betalningar, autentisering). Om buggen inte är kritisk — kan den korrigeras inom ramen för den vanliga releasecykeln via develop.
För mobilapplikationer kan hotfix även omfatta serverändringar, om arkitekturen tillåter fjärrväxling av funktioner (feature flags). I så fall kan hotfix-grenen vara minimal eller inte behövas alls, om korrigeringen görs på serversidan.
Alla förgreningsmodeller stöder inte hotfix-grenar. Traditionell Git Flow förutser hotfix som en fullvärdig gren typ, medan mer moderna angreppssätt (GitHub Flow, Trunk-based) löser problemet med akuta korrigeringar annorlunda.
Git Flow — är den enda modellen där hotfix är en inbyggd gren typ vid sidan av feature och release. I Git Flow skapas hotfix från main, och efter slutförande slås den samman både med main (med versionstagg) och develop. Detta garanterar att korrigeringen inte går förlorad i nästa release.
| Egenskap | Hotfix i Git Flow | Feature i Git Flow |
|---|---|---|
| Från vilken gren | main | develop |
| Vart sammanfogas | main + develop | develop |
| Livslängd | timmar | dagar / veckor |
| Innehåll | endast buggkorrigering | ny funktionalitet |
GitHub Flow använder inte en separat gren typ för hotfix. Istället skapar utvecklaren en vanlig feature-gren från main, utför korrigeringen och öppnar en Pull Request. Efter granskning och CI-kontroller slås grenen samman med main och lanseras omedelbart. Fördel — enkelhet, nackdel — avsaknad av separat kanal för brådskande korrigeringar.
Trunk-based utveckling löser hotfix-problemet genom direkta commits till main (för kritiska fall) med obligatorisk granskning i efterhand. Detta angreppssätt kräver hög teamdisciplin och pålitliga automatiska tester, eftersom ändringar hamnar i produktion omedelbart.
Skapa hotfix börjar med att växla till huvudgrenen och skapa en ny gren med prefixet hotfix/. Låt oss gå igenom processen steg för steg med exemplet att korrigera en kritisk bugg i en mobilapplikation.
Första steget — växla till main och försäkra dig om att grenen är aktuell. Skapa sedan en hotfix-gren med ett tydligt namn som återspeglar korrigeringens innebörd.
# Växla till main och hämta de senaste ändringarna
git checkout main
git pull origin main
# Skapa en hotfix-gren
git checkout -b hotfix/crash-on-login
Efter att grenen skapats kan korrigeringen utföras. Viktigt: hotfix bör innehålla ett minimalt antal ändringar. Refaktorisera inte koden och lägg inte till nya funktioner — endast punktkorrigering som eliminerar problemet.
Commit i hotfix bör ha ett informativt meddelande som entydigt beskriver problemet och dess lösning. Format: typ(område): kort beskrivning + länk till uppgiften i trackern.
# Lägg till ändrade filer
git add src/ui/login/LoginActivity.kt
# Skapa en commit med beskrivning
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-meddelandet bör innehålla problembeskrivning och länk till uppgiften. Detta förenklar sökning i historiken och hjälper kollegor att förstå vad som korrigerades och varför. För mobilprojekt anges vanligtvis även den applikationsversion där buggen upptäcktes.
Sista steget — sammanfoga hotfix tillbaka till main (med tagg för den nya patch-versionen) och till develop (så att korrigeringen bevaras i nästa release). Först skapas sammanfogningen till main med tagg, därefter sammanfogningen till develop.
# Sammanfoga med main och skapa en tagg
git checkout main
git merge --no-ff hotfix/crash-on-login
git tag -a v2.3.1 -m "Hotfix: crash on login"
# Sammanfoga med develop
git checkout develop
git merge --no-ff hotfix/crash-on-login
# Skicka ändringarna till servern
git push origin main --tags
git push origin develop
Flaggan --no-ff garanterar skapandet av en sammanfogningscommit, även om hotfix kunde tillämpas genom fast-forward. Detta bevarar informationen om att en akut korrigering utfördes och förenklar analysen av historiken i framtiden.
Hotfix skiljer sig fundamentalt från feature- och release-grenar i syfte, livslängd och sammanfogningsregler. Förståelse av dessa skillnader är avgörande för korrekt organisering av Git-processer i teamet.
Feature-gren är avsedd för ny funktionalitet. Den lever från några dagar till några veckor, skapas från develop och sammanfogas tillbaka till develop. Feature kan innehålla många commits, inklusive experimentella, som senare komprimeras genom squash eller rebase.
Release-gren förbereder release för publicering. Den skapas från develop, i den korrigeras buggar som hittats under stabilisering och den tar inte emot ny funktionalitet. Efter slutförande sammanfogas release med main (med tagg) och develop.
Hotfix däremot skapas och sammanfogas direkt med main, förbi develop (även om den efter korrigering synkroniseras med develop också). Den innehåller ett minimalt antal ändringar och existerar under minimal tid. Om feature eller release kan skjutas upp till nästa cykel, hotfix — kan inte.
För mobil utveckling är denna skillnad särskilt viktig: App Store och Google Play tillåter att patch-versioner släpps separat från huvudreleaser. Hotfix-grenen säkerställer en process där patch-releasen inte blandas med ofärdiga funktioner.
Misstag vid arbete med hotfix kan upphäva fördelarna med akut korrigering. Låt oss titta på fem vanliga problem som uppstår i team som använder Git Flow.
Vart och ett av dessa misstag leder till försening av patch-utgåvan eller till uppkomst av nya problem i produktion. Team bör fastställa regler för arbete med hotfix i CONTRIBUTING.md och automatisera dem genom CI/CD-kontroller.
Vanliga frågor
Hotfix korrigerar ett kritiskt fel i produktion och skapas från main, medan en vanlig buggkorrigering korrigerar ett fel i develop och kommer att inkluderas i nästa planerade release. Hotfix kräver omedelbar utgivning av en patch-version.
Ja, hotfix kan skapas i vilken förgreningsmodell som helst. I GitHub Flow används en vanlig feature-gren från main med efterföljande Merge via Pull Request. I Trunk-based — direkt commit till main med obligatorisk granskning i efterhand.
Önskvärt, men snabb granskning är tillåten. För kritiska buggar kan mekanismen “approve after merge” användas — hotfix sammanfogas först och granskningen utförs i efterhand. Det viktiga är att fastställa en sådan procedur i teamets regler.
Format: hotfix/kort-problembeskrivning. Till exempel: hotfix/null-pointer-auth, hotfix/crash-on-payment. Namnet bör vara förståeligt för alla teammedlemmar och bör helst innehålla uppgiftsnumret i trackern.
Lös konflikten vid sammanfogning till develop på samma sätt som vid en vanlig merge. Om konflikten är betydande — troligen fanns det i develop ändringar som påverkar samma område. I detta fall är det viktigt att försäkra sig om att korrigeringen fungerar korrekt med den nya koden.
Sammanfattning
Vi utvecklar en mobil applikation nyckelfärdigt
IT Sectr skapar iOS- och Android-applikationer för startups och företag sedan 2017. Vi ger dig råd och föreslår den bästa lösningen.
Läs också