Typy slučování

Advanced Git

Amanda Crawford-Adamo

Software and Data Engineer

Jsem Amanda

Fotografie Amandy

Advanced Git

Co je git merge?

Příkaz git merge:

git merge
  • Sloučí změny z jedné větve do druhé
  • Najde společný základ dvou větví
  • Podporuje různé strategie slučování

Silnice, kde se dvě cesty spojují a na společné silnici se setkávají dvě auta

Advanced Git

Fast-forward merge

Co je fast-forward merge?

  • Udržuje jednoduchou lineární historii
  • Vhodný pro krátkodobé větve s jednoduchými změnami

$$

Kdy nepoužívat

  • Při potřebě zachovat historii větve
  • Složitý vývoj funkcí v dlouhodobých větvích
  • Konflikt při slučování – fast-forward okamžitě selže!
Advanced Git

Fast-forward merge (před sloučením)

Graf znázorňující dvě větve: main a feature branch. Main má dva commity. Feature branch se odděluje po posledním commitu větve main a obsahuje jeden další commit.

Advanced Git

Syntaxe fast-forward merge

Výchozí fast-forward merge

git checkout main
git merge feature_branch

Vynucení fast-forward merge

git merge <branch> --ff-only

Příklad

git checkout main
git merge feature_branch --ff-only
Advanced Git

Fast-forward merge (po sloučení)

Graf znázorňující dvě větve: main a feature branch. Main má tři commity. Feature branch se odděluje po druhém commitu větve main a obsahuje jeden další commit. Třetí commit větve main je kopií posledního commitu větve feature branch.

Advanced Git

Rekurzivní merge

Co je rekurzivní merge?

  • Vytváří merge commit se dvěma rodiči
  • Zachovává celou historii projektu
  • Vhodný pro dlouhodobé větve
  • Udržuje strukturu větvení

$$

Kdy nepoužívat

  • Při požadavku na jednoduchou lineární historii
  • Pro rychlé a drobné změny
Advanced Git

Rekurzivní merge (před sloučením)

Graf znázorňující dvě větve: main a feature branch. Main má tři commity. Feature branch se odděluje po prvním commitu větve main a obsahuje dva další commity.

Advanced Git

Syntaxe rekurzivního merge

Příkaz pro rekurzivní merge:

git merge --no-ff <branch>

Příklad

$ git checkout main
Switched to branch 'main'
Your branch is up to date with 'origin/main'.

$ git merge --no-ff feature_branch
Merge made by the 'recursive' strategy.
...
Advanced Git

Rekurzivní merge (po sloučení)

Graf znázorňující dvě větve: main a feature branch. Main má šest commitů. Feature branch se odděluje po posledním commitu větve main a obsahuje dva další commity. Šest commitů větve main je prokládáno commity obou větví. Poslední commit větve main je merge commit se dvěma rodiči: posledním commitem větve feature branch a předchozím posledním commitem větve main.

Advanced Git

Shrnutí

  • Fast-forward merge udržuje historii jednoduchou a lineární
  • Rekurzivní merge zachovává historický kontext
  • Rekurzivní merge je vhodnější pro složitější vývoj

Příkazy pro fast-forward merge

git merge <branch_name> # výchozí příkaz
git merge --ff-only <branch_name> # vynucení fast-forward merge

Příkaz pro rekurzivní merge

git merge --no-ff <branch_name>
Advanced Git

Pojďme si procvičit!

Advanced Git

Preparing Video For Download...