Složité scénáře slučování

Advanced Git

Amanda Crawford-Adamo

Software and Data Engineer

Repozitář datového pipeline letecké dopravy

Graf adresáře repozitáře datového pipeline letecké dopravy. Pracovní adresář Gitu obsahuje 4 soubory: etl.py, load.py, transform.py a ingest.py. Adresář data obsahuje soubor flight_data.csv. Je zobrazen také adresář .git.

Advanced Git

Squash merge v Gitu

$$

Funkce

  • Vytvoří jediný nový commit v cílové větvi
  • Sloučí všechny změny ze zdrojové větve
    • Přidá běžný commit s jedním rodičem (na rozdíl od rekurzivní strategie)
  • Přidán do cílové větve (ne do feature větve)
    • Nezachovává detailní historii commitů zdrojové větve

$$

Výhody

  • Přehledná a lineární historie
  • Zjednodušuje revizi kódu u rozsáhlých funkcí
  • Snazší vrácení celé funkce
Advanced Git

Příklad sloučení squash

Větev data-cleanup se odděluje od větve main po druhém commitu. Větev main má jeden další commit. Větev data-cleanup má dva další commity.

Advanced Git

Postup sloučení squash

  1. Přepnutí na větev main

    $ git checkout main
    
  2. Vytvoření squash commitu ze všech změn větve data-cleanup

    $ git merge --squash data-cleanup
    
  3. Uložení squash commitu do historie větve main

    $ git commit -m "Implement and optimize data cleanup"
    
Advanced Git

Výsledek sloučení squash

Graf zobrazující dvě větve: main a data-cleanup. Větev main má čtyři commity. Větev data-cleanup se odděluje od posledního commitu main a obsahuje vlastní commit. Poslední commit větve main je jediný nadřazený commit obsahující sloučené commity větve data-cleanup.

Advanced Git

Sloučení octopus v Gitu

$$

Funkce

  • Sloučí tři a více větví najednou
  • Vytvoří jediný merge commit s více rodiči
  • Vhodné, pokud si větve vzájemně nekonfliktují

$$

Výhody

  • Vhodné pro integraci více nezávislých funkcí najednou
  • Používá se pro synchronizaci release větví různých verzí projektu
Advanced Git

Příklad sloučení octopus

Čtyři vývojové větve: main, ingestion, transform a load. Větve ingestion, transform a load se oddělují od main po prvním commitu, každá s dalším commitem. Větev main má také jeden další commit.

Advanced Git

Příkazy pro sloučení octopus

Příkaz Git Octopus Merge

git merge -s octopus

Příklad

$ git merge -s octopus ingest transform load
Trying simple merge with ingest
Trying simple merge with transform
Trying simple merge with load
Merge made by the 'octopus' strategy.
...
Advanced Git

Výsledek sloučení octopus

Čtyři vývojové větve: main, ingestion, transform a load. Větve ingestion, transform a load se oddělují od main po prvním commitu, každá s dalším commitem. Větev main má pět commitů zahrnujících commity ostatních větví. Poslední merge commit má čtyři rodiče: předchozí nejnovější commit větve main a nejnovější commity větví ingest, transform a load.

Advanced Git

Shrnutí

Squash merge

  • Zjednodušuje historii, sloučí více commitů do jednoho
  • Vhodné pro přehlednou a lineární historii
    git merge --squash <source_branch>
    

Octopus merge

  • Zachovává strukturu větví
  • Sloučí více větví najednou
  • Efektivní integrace více paralelních vývojů
    git merge -s octopus <branch 1> <branch 2> <branch 3>
    
Advanced Git

Pojďme si to procvičit!

Advanced Git

Preparing Video For Download...