Moderní tvorba webových aplikací

O webu

Jak používat git rebase

Proč a jak používat git rebase pro přehlednou historii v Gitu.

5 minut

Při práci ve více lidech s versovacím nástrojem Git je prakticky nevyhnutelný stav, kdy vývoj probíhá paraelně ve více větvích. V extrémním případě potom ve větvích různě od sebe odvozených.

Např. první feature branch odvozená z hlavní main větve, ze které vychází další feature branch.

Příkaz git rebase (popř. git merge) se potom hodí pro synchronisaci větví mezi sebou, aby pořád vycházely z aktuálního mainu.

Merge vs. rebase

Obecně celkem platí, že git merge používají dvě skupiny lidí:

  1. lidé, co moc nerozumí Gitu,
  2. lidé, co neřeší hezkou historii commitů

Hezká historie souvisí i s vytvářením smysluplných commitů.

Jsou i lidé, co se rebase bojí. Přitom pro to moc není důvod – použití je dost jednoduché.

Základní rebase

Běžné použití je následovné:

Nejprve se stáhne aktuální stav:

git fetch

Do aktuální feature větve se dostanou nové commity prostým:

git rebase origin/main

Co se stane:

  1. Git najde poslední společný commit obou větví.
  2. Dočasně uloží všechny commity z feature větve.
  3. Přesune feature větev na konec main větve.
  4. Postupně aplikuje uložené commity jeden po druhém.

Výsledkem je lineární historie, kde všechny commity z feature větve následují po commitech z main větve.

Nezbývá než změny pushnout. Je zde potřeba uvést přepínač force, protože se změnila historie.

git push -f

Případně jde rebase naklikat ve VS Code:

Rebase ve VS Code

Rebase --onto

Příkaz git rebase --onto se hodí pro případy, kdy moje větev vychází z větve, na které pracuje někdo jiný. A ten tam mění historii. To se obecně nepovažuje za dobrý postup, ale s rebase --onto to není problém.

git rebase --onto origin/cizi-vetev HEAD~

Tento příklad vezme můj poslední commit (HEAD~) a umístí ho nad celou cizí větev. Starší commity se ignorují, takže nehrozí řešení nesmyslných konfliktů.

Interaktivní rebase

Interaktivní rebase je mocný nástroj pro úpravu historie:

git rebase -i HEAD~3

Otevře se editor s možnostmi:

  • pick – ponechat commit
  • reword – změnit commit message
  • edit – upravit commit
  • squash – sloučit s předchozím
  • fixup – sloučit a zahodit message
  • drop – smazat commit

Řešení konfliktů

Při rebase mohou nastat konflikty. Git oznámí konflikt a zastaví rebase. Po vyřešení:

git add <conflicted-files>
git rebase --continue

Nebo můžete rebase zrušit:

git rebase --abort

Dobré praktiky

  • Pravidelně rebaseovat s hlavní větví. Minimalisuje se tím nepěkné překvapení po dokončení úkolu s řešením hromady konfliktů.
  • Mít main větev nastavenou jako protected. Jestliže se používá force push, je jen otázka času, kdy se člověk splete, a pustí to nad main větví.
  • Nepoužívat force push do větví, kde pracuje více lidí. Nebo nepracovat v jedné větvi ve více lidech, ale řešit to další odvozenou větví a merge/pull requestem.

Závěr

git rebase je nástroj pro vytvoření čisté a lineární historie. Umožňuje přesunout commity na novou základnu a upravit historii před publikováním. Je to alternativa k merge, která zachovává přehlednou historii, ale vyžaduje opatrnost při používání na veřejných větvích.

Související články

Více Git větví vedle sebe

Jak spustit více větví jednoho repositáře vedle sebe.

3 minuty

Jak v praxi používat Git

Jak rychle a efektivně používat versovací systém Git.

9 minut

Zvláštní znaky na české klávesnici v macOS

Jak v macOS na běžné české klávesnici pohodlně programovat a zapisovat všelijaké speciální znaky?

11 minut

10+ věcí, jak AI pomáhá při programování

AI dokáže výrazně zvýšit efektivitu programátora. Nevezme mu ale práci?

9 minut

Web jecas.cz píše Bohumil Jahoda, kontakt
Seznam všech článků
2013–2025