Hotfix Git
3. novembar 2026.
Zamislite scenario. Utorak je prepodne, kafa je još topla, a mi smo u zoni. Radimo na grani feature/nova-stranica, otvorili smo osam fajlova, pola koda radi, pola je zakucano // TODO komentarima i ništa od toga nije spremno za commit.
I onda stiže poruka:
"Produkcija ne radi, korisnici ne mogu da se uloguju. Možeš li odmah da pogledaš?"
Prva misao je panika. Druga je: "Kako da ostavim sve ovo ovako i pređem na nešto drugo, a da ništa ne izgubim?"
Dobra vest je da git ima odgovor za to, i to ne jedan nego tri. Prođimo kroz njih.
Kad nas stisne, lako je da napravimo neku od ovih grešaka:
git checkout ., git reset --hard) da bi nam git dozvolio da pređemo na drugu granu. Sat vremena rada nestaje u jednoj komandi.Pravilo je jednostavno: hotfix ide na svoju granu, koja kreće iz main-a, a naš nedovršeni rad ostaje sačuvan negde sa strane.
main o---o---o---------------o (hotfix ide ovde)
\ /
hotfix/login o---o---o---o
\
feature/nova o---o---o (ovo ostaje netaknuto)
Zamislite da stavljamo sve što smo radili u fioku i zatvaramo je. Radni folder je opet čist, a izmene čekaju da se vratimo.
git stash push -u -m "nova stranica, pola forme"
Šta znače delovi komande:
-m daje stash-u ime, da za dva dana znamo šta je unutra.-u uključuje i nove fajlove koje git još ne prati. Bez toga bi ostali u folderu i mogli bi da nas zbune.Sad kad je folder čist, pravimo hotfix:
git switch main git pull git switch -c hotfix/login-crash # ... popravimo bug ... git add . git commit -m "Popravljen pad pri loginu" git push -u origin hotfix/login-crash
Kad se hotfix pregleda i spoji u main, vraćamo se na svoj posao:
git switch feature/nova-stranica git stash pop
I eto nas tačno tamo gde smo stali, sa svih osam otvorenih fajlova i TODO komentarima.
Tip: Ako imamo više stash-eva, git stash list ih prikazuje sve. Pošto smo ih imenovali, odmah znamo koji je koji.
Neki ne vole stash, jer deluje kao da stvari nestaju u nekoj magli. Za njih postoji običan commit koji ćemo kasnije "poništiti".
git add -A git commit -m "WIP: nova stranica" git switch main
Hotfix radimo isto kao gore. Kad se vratimo na feature granu, uradimo:
git switch feature/nova-stranica git reset HEAD~1
reset HEAD~1 (bez --hard) skida poslednji commit, ali sve izmene ostavlja u fajlovima. Kao da commit nikad nismo napravili.
Pazimo: ovaj WIP commit nikad ne pushujemo. Ostaje samo kod nas dok ne uradimo reset.
Evo stvari koju mnogi ne znaju da postoji. Šta ako ne želimo da ništa sklanjamo u fioku? Šta ako bismo želeli dva foldera iz istog repozitorijuma, svaki na svojoj grani?
To je git worktree.
git worktree add ../hotfix-login -b hotfix/login-crash main
Ova komanda pravi novi folder ../hotfix-login, u njemu je grana hotfix/login-crash napravljena iz main-a. Naš originalni folder sa feature granom ostaje potpuno netaknut: nedovršeni fajlovi su na svom mestu, a editor otvoren.
Sad otvorimo novi folder u drugom prozoru editora, popravimo bug, napravimo commit i push kao i inače:
cd ../hotfix-login git add . git commit -m "Popravljen pad pri loginu" git push -u origin hotfix/login-crash
Kad je gotovo, uklanjamo folder:
cd ../moj-projekat git worktree remove ../hotfix-login
Ovo je naročito korisno kad hotfix traje duže, ili kad treba da pokrenemo aplikaciju sa popravkom, a da nam feature ne smeta.
Čest propust: spojimo hotfix u main, odahnemo i zaboravimo na feature granu. Ona sad ne zna za popravku. Zato se vratimo na nju i povučemo najnovije:
git switch feature/nova-stranica git merge main
Tako kad jednog dana budemo spajali feature u main, neće biti iznenađenja i konflikata, a bug koji smo popravili neće ponovo da se pojavi.
Hotfix granu možemo da obrišemo kad više nije potrebna:
git branch -d hotfix/login-crash