EN

Git Flow — feature, release a hotfix větve

Větvící model Gitflow: main/develop plus feature, release a hotfix větve — s příkazy, přehledem větví a tím, kdy jej NEpoužívat.

Co tato dovednost pokrývá

Větvící model Gitflow — dvě dlouhověké větve (main, develop) plus tři druhy krátkověkých podpůrných větví (feature/*, release/*, hotfix/*) — a příkazy k obsluze každé z nich. Upřímně pokrývá i to, kdy je Gitflow špatná volba. Pro běžné příkazy gitu viz Git , pro souběžné větve v oddělených adresářích viz Git Worktrees .

Kdy ji použít

  • Při rozhodování, odkud má změna větvit a kam se má slučovat zpět v Gitflow
  • Při zahájení feature, přípravě release nebo nasazení urgentního hotfixu
  • Při zavádění release-orientovaného větvícího modelu pro verzovaný produkt
  • Při rozhodování, zda týmu vyhovuje Gitflow, nebo jednodušší model (trunk-based, GitHub Flow)

Větve

  • main — produkce. Každý commit je vydaná, otagovaná verze.
  • develop — integrační větev. Dokončené features sem přistávají první.
  • feature/* — jedna na jednotku práce; větví z develop a slučuje se zpět do develop.
  • release/* — větví z develop pro stabilizaci verze; slučuje se do main i develop.
  • hotfix/* — větví z main pro opravu produkce; slučuje se do main i develop.

Gitflow lze řídit čistým git (níže, funguje všude) nebo rozšířením příkazové řádky git flow, které stejné kroky obaluje.

Kdy Gitflow NEpoužívat

Stojí za to být upřímný — Gitflow je pro moderní webovou práci často špatná výchozí volba.

  • Kontinuálně nasazované webové aplikace / SaaS: preferujte trunk-based development nebo GitHub Flow — krátkověké větve z main, sloučit a nasadit. Dlouhověké develop a release větve Gitflow přidávají ceremonii, kterou pipeline nasazující při merge nepotřebuje.
  • Malé týmy / sólo projekty: režie se málokdy vyplatí.
  • Pokud nasazujete main mnohokrát denně, rozdělení develop/release jde proti vám.

Gitflow se vyplatí, když vydáváte oddělené, verzované release (instalovaný software, mobilní aplikace, knihovny, on-prem produkty) a možná musíte podporovat více verzí najednou.

Nastavení

# Čistý git: jednorázově vytvořit větev develop z main
git switch main
git switch -c develop
git push -u origin develop

# Nebo rozšířením git flow (interaktivní; přijměte výchozí hodnoty)
git flow init

Feature větve

Větví z develop, slučují se zpět do develop. Nikdy nevětvete feature z main.

# Start
git switch develop
git pull
git switch -c feature/short-description

# ... commity práce ...

# Finish — začlenění zpět do develop
git switch develop
git pull
git merge --no-ff feature/short-description
git push
git branch -d feature/short-description

# ekvivalent git flow
git flow feature start short-description
git flow feature finish short-description

--no-ff udrží commity feature seskupené pod merge commitem, takže tvar větve zůstane v historii viditelný.

Release větve

Větví z develop, jakmile je rozsah release zmražen. Sem patří jen stabilizační commity (bump verze, changelog, opravy chyb) — žádné nové features. Slučte do main i develop a otagujte main.

# Start
git switch develop
git pull
git switch -c release/1.4.0
# ... bump verze, aktualizace changelogu, oprava blokujících chyb ...

# Finish
git switch main
git merge --no-ff release/1.4.0
git tag -a v1.4.0 -m "Release 1.4.0"

git switch develop
git merge --no-ff release/1.4.0   # aby se opravy z release větve vrátily do develop

git push origin main develop --tags
git branch -d release/1.4.0

# ekvivalent git flow
git flow release start 1.4.0
git flow release finish 1.4.0     # sloučí do main + develop a otaguje

Sloučení release zpět do develop je krok, na který se zapomíná — vynechte ho a opravy chyb z release větve zmizí z probíhajícího vývoje.

Hotfix větve

Pro urgentní opravu produkce. Větev z main, sloučit do main i develop, otagovat main novou patch verzí.

# Start z produkce
git switch main
git pull
git switch -c hotfix/1.4.1
# ... oprava chyby ...

# Finish
git switch main
git merge --no-ff hotfix/1.4.1
git tag -a v1.4.1 -m "Hotfix 1.4.1"

git switch develop
git merge --no-ff hotfix/1.4.1

git push origin main develop --tags
git branch -d hotfix/1.4.1

# ekvivalent git flow
git flow hotfix start 1.4.1
git flow hotfix finish 1.4.1

Pokud je při hotfixu otevřená release/* větev, slučte hotfix do release větve místo do develop (release větev ho při finish přenese do develop) — jinak slučujete stejnou opravu dvakrát.

Přehled větví

VětevVětví zSlučuje se zpět doOtagováno?
feature/*developdevelopne
release/*developmain i developano (na main)
hotfix/*mainmain i developano (na main)

Bezpečnostní pravidla

  • main je vždy vydatelný. Slučujte do něj jen release/* nebo hotfix/*, vždy otagované.
  • Žádné features na release/* nebo hotfix/* — jen stabilizační/opravné commity.
  • Vždy slučte release a hotfix větve zpět do develop, jinak se opravy z probíhající práce ztratí.
  • Používejte --no-ff pro sloučení podpůrných větví, aby historie ukazovala, kde se každá větev začlenila.
  • Otagujte každé sloučení do main sémantickou verzí — tag je identitou vydaného artefaktu.

Časté chyby

  • Feature větev žije týdny. Čím déle se vzdaluje od develop, tím horší je závěrečný merge. Průběžně do ní slučujte develop a práci dělte na menší features.
  • Nové features do release větve. Release větev má verzi stabilizovat; každá přidaná funkce stabilizaci vrací na začátek.
  • Hotfix přímo na main. Bez větve hotfix/* se oprava snadno nedostane do develop a v příští verzi se chyba vrátí.
  • Chybějící tag. Sloučení do main bez tagu znamená, že nejde dohledat, který commit je která verze.
  • Fast-forward merge podpůrných větví. Bez --no-ff zmizí z historie hranice feature a nejde ji revertovat jedním commitem.
  • Gitflow „protože se to tak dělá“. U webu nasazovaného při každém merge je develop jen další větev, kterou je potřeba udržovat v synchronizaci.

Řešení problémů

PříznakPříčina / řešení
Oprava z release větve chybí v nových featuresRelease větev nebyla sloučena zpět do develop — slučte ji nyní
Stejný hotfix aplikován dvakrát, merge konfliktHotfix sloučen do develop i otevřené release/* — slučte jen do release větve; ta ho přenese do develop při finish
develop daleko před main, nikdy se nevydáváKadence nasazení předbíhá model — zvažte trunk-based / GitHub Flow
Příkaz git flow nenalezenNainstalujte rozšíření (git-flow / git-flow-avh), nebo použijte kroky s čistým gitem výše
Feature omylem větvena z mainRebasujte ji na develop: git rebase --onto develop main feature/x

Časté otázky

Co je Git Flow?

Git Flow (Gitflow) je větvící model s dvěma trvalými větvemi — main pro vydané verze a develop pro integraci — a třemi druhy dočasných větví: feature/*, release/* a hotfix/*. Každý druh má dané, odkud větví a kam se slučuje.

Jaký je rozdíl mezi Git Flow a GitHub Flow?

GitHub Flow má jedinou trvalou větev main: krátká větev, pull request, merge, nasazení. Git Flow přidává develop a release větve, takže se hodí pro produkty vydávané po verzích; pro web nasazovaný při každém merge je to zbytečná režie.

Musím instalovat rozšíření git flow?

Ne. Příkazy git flow feature start a podobné jen obalují běžný git switch, git merge --no-ff a git tag. Celý model jde provozovat čistým gitem, rozšíření šetří psaní a hlídá pořadí kroků.

Odkud větvit hotfix a kam ho sloučit?

Hotfix větví z main, protože opravuje to, co běží v produkci. Po opravě se sloučí do main (s tagem nové patch verze) a zpět do develop — nebo do otevřené release/* větve, pokud právě existuje.

Je Git Flow zastaralý?

Zastaralý není, jen se nehodí všude. Pro kontinuálně nasazované weby a SaaS je jednodušší trunk-based development nebo GitHub Flow. Pro knihovny, mobilní aplikace a on-prem software s číslovanými verzemi dává Git Flow pořád smysl.