Pokročilá integrace větví: Git Rebase

Advanced Git

Amanda Crawford-Adamo

Software and Data Engineer

Git rebase

  • Metoda integrace změn
  • Liší se od merge
  • Odstraňuje merge commity pro čistší historii
  • Udržuje lineární graf commitů

Příkaz Git Rebase:

git rebase <branch_name>
Advanced Git

Příklad rebase – před

Obrázek větve data-cleanup a větve main. Větev data-cleanup se odděluje po druhém commitu v main. Větev main obsahuje dva další commity vzniklé po vytvoření větve data-cleanup.

Advanced Git

Proces rebase

  1. Přepněte se na větev data-cleanup.
git checkout data-cleanup
  1. Proveďte rebase větve main na větev data-cleanup.
git rebase main
  • Commity z data-cleanup jsou znovu vytvořeny za posledním commitem main
  • Commity po rebase v data-cleanup získají nové hashe

Poznámka: Pokud dojde ke konfliktům, je nutné je vyřešit ručně.

Advanced Git

Příklad rebase – po

Obrázek větve data-cleanup po rebase na větev main. Větev data-cleanup nyní obsahuje všechny commity z main a commity data-cleanup začínají až za nimi. Větev main zůstala nezměněna.

Advanced Git

Interaktivní rebase

git rebase -i <commit_hash> 

Funkce

  • Umožňuje provádět granulární změny ve více commitech
  • Otevře editor

Upozornění!

  • Rebase na veřejných větvích může narušit pracovní postupy
    • Nepoužívejte rebase na veřejných větvích, jako je main
  • Stanovte týmová pravidla pro používání rebase
Advanced Git

Interaktivní rebase – před

$$

Historie větve data-validation před úpravou historie commitů.

$ git log --oneline data-validation
abc1234 Optimize validation performance
def5678 Fix validation bug
ghi9101 Add data validation function
xyz1234 New Main Branch Commit
vwx7890 Main Branch Commit
jkl2345 Initial commit
Advanced Git

Editor interaktivního rebase

Úprava historie commitů pomocí příkazů pick a fixup v otevřeném editoru.

$ git rebase -i HEAD~3 
pick ghi9101 Add data validation function
fixup def5678 Fix validation bug
fixup abc1234 Optimize validation performance

# Rebase xyz1234..abc1234 onto HEAD~3(xyz1234) (3 commands)
#
# Commands:
# p, pick <commit> = use commit
# f, fixup <commit> = like "squash", but discard this commit's log message
...
Advanced Git

Interaktivní rebase – po

Před

$ git log --oneline data-validation
abc1234 Optimize validation performance
def5678 Fix validation bug
ghi9101 Add data validation function
xyz1234 New Main Branch Commit
vwx7890 Main Branch Commit
jkl2345 Initial commit

Po

$ git log --oneline data-validatoin
mno6789 Add data validation function
xyz1234 New Main Branch Commit
vwx7890 Main Branch Commit
jkl2345 Initial commit

Následující commity jsou sloučeny do jednoho

  • abc1234
  • def5678
  • ghi9101
Advanced Git

Merge vs. rebase

Obrázek zobrazuje tři grafy: divergovaný graf větví, výsledný graf po merge a výsledný graf po rebase

Merge

  • Zachovává úplnou historii a strukturu větví
  • Udržuje kontext paralelního vývoje

Rebase

  • Přehraje commity na vrcholu cílové větve
  • Vytvoří lineární historii
  • Ztrácí část kontextových informací
Advanced Git

Kdy použít merge nebo rebase

Merge

Pro integraci dokončených funkcí a zachování kontextu vývoje

Rebase

Pro aktualizaci větví funkcí z main nebo pro úpravu před mergem

Pamatujte

  • Rebase přepisuje historii – používejte opatrně
Advanced Git

Pojďme si to procvičit!

Advanced Git

Preparing Video For Download...