Sobes.tech
Middle

Jak ve vaší společnosti probíhá slučování větví (merge) nebo přepisování historie (rebase) v systému správy verzí?

sobes.tech AI

Odpověď od AI

V našem týmu dodržujeme pracovní tok založený na Git. Pro integraci změn používáme dva hlavní přístupy: merge a rebase, vybíráme je podle situace a typu větve.

Merge:

  • Obvykle se používá k sloučení dlouhodobých větví, například dev do main, nebo k integraci funkcí do dev.
  • Vytváří commit sloučení, který jasně ukazuje, kdy došlo ke sloučení změn z jiných větví.
  • Zachovává celou historii commitů, včetně všech větvení.
git checkout dev  // Přepnutí na cílovou větev
git merge feature/nova-funkce  // Sloučení větve funkce

Rebase:

  • Používá se k udržení čisté a lineární historie commitů ve větvích funkcí až do jejich integrace (obvykle v dev).
  • Přesouvá commity aktuální větve na vrchol cílové větve (dev), efektivně "přepisujíc" historii.
  • Zjednodušuje historii, vyhýbá se commitům merge pro každou malou funkci nebo opravu.
  • Důležité: Nikdy neprovádějte rebase na veřejných větvích, na kterých pracují jiní vývojáři, protože to může způsobit konflikty při pullování změn.
git checkout feature/nova-funkce  // Přepnutí na větev funkce
git rebase dev  // Přesunutí commitů větve funkce na vrchol dev
// Pokud je třeba, řešíme konflikty
git push --force-with-lease  // Používáme --force-with-lease pro bezpečný push po rebase

Náš standardní pracovní tok:

  1. Nová funkce nebo oprava je vyvíjena v samostatné větvi (feature/..., fix/...).
  2. Občas (před pull requestem nebo pro synchronizaci s dev) je větev funkce rebaseována na aktuální verzi dev. To pomáhá řešit konflikty v rané fázi.
  3. Po dokončení vývoje a revizi kódu je větev funkce sloučena do dev s no-ff (non-fast-forward), aby se zachovala informace o sloučení. Nebo, méně často, je squashována do jednoho commitu před sloučením do dev pro velmi malé funkce nebo opravy.
  4. Z dev jsou pravidelně vydávány verze do main (produkční větev), vždy pomocí merge.

Tímto způsobem vyvažujeme zachování historie commitů (merge) s udržením čisté vývojové větve (rebase větví funkcí).