Rodzaje scalania

Zaawansowany Git

Amanda Crawford-Adamo

Software and Data Engineer

Jestem Amanda

Zdjęcie Amandy

Zaawansowany Git

Czym jest git merge?

Polecenie git merge:

git merge
  • Łączy zmiany z jednej gałęzi z drugą
  • Wyszukuje wspólną bazę między dwiema gałęziami
  • Obsługuje różne strategie scalania

Droga, na której łączą się dwa pasy ruchu, a dwa samochody wjeżdżają na tę samą jezdnię

Zaawansowany Git

Scalanie fast-forward

Czym jest scalanie fast-forward?

  • Zachowuje prostą, liniową historię
  • Idealne dla krótkotrwałych gałęzi z prostymi zmianami

$$

Kiedy nie używać

  • Gdy wymagane jest zachowanie historii gałęzi
  • Złożone funkcjonalności w długo działających gałęziach
  • Konflikt scalenia – fast-forward natychmiast kończy się błędem!
Zaawansowany Git

Scalanie fast-forward (przed)

Graf przedstawiający dwie gałęzie: main i feature branch. Gałąź main ma dwa commity. Gałąź feature odgałęzia się po ostatnim commicie gałęzi main z jednym dodatkowym commitem.

Zaawansowany Git

Składnia scalania fast-forward

Domyślne scalanie fast-forward w Git

git checkout main
git merge feature_branch

Wymuś scalanie fast-forward

git merge <branch> --ff-only

Przykład

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

Scalanie fast-forward (po)

Graf przedstawiający dwie gałęzie: main i feature branch. Gałąź main ma trzy commity. Gałąź feature odgałęzia się po drugim commicie gałęzi main z jednym dodatkowym commitem. Trzeci commit gałęzi main jest kopią ostatniego commitu gałęzi feature.

Zaawansowany Git

Scalanie rekurencyjne

Czym jest scalanie rekurencyjne?

  • Tworzy commit scalenia z dwoma rodzicami
  • Zachowuje pełną historię projektu
  • Idealne dla długo działających gałęzi
  • Utrzymuje strukturę gałęzi

$$

Kiedy nie używać

  • Gdy wymagana jest prosta, liniowa historia
  • Szybkie i drobne zmiany
Zaawansowany Git

Scalanie rekurencyjne (przed)

Graf przedstawiający dwie gałęzie: main i feature branch. Gałąź main ma trzy commity. Gałąź feature odgałęzia się po pierwszym commicie gałęzi main z dwoma dodatkowymi commitami.

Zaawansowany Git

Składnia scalania rekurencyjnego

Polecenie scalania rekurencyjnego:

git merge --no-ff <branch>

Przykład

$ 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.
...
Zaawansowany Git

Scalanie rekurencyjne (po)

Graf przedstawiający dwie gałęzie: main i feature branch. Gałąź main ma sześć commitów. Gałąź feature odgałęzia się po ostatnim commicie gałęzi main z dwoma dodatkowymi commitami. Commity gałęzi main są przeplecione commitami obu gałęzi. Ostatni commit gałęzi main jest commitem scalenia z dwoma rodzicami: ostatnim commitem gałęzi feature i poprzednim ostatnim commitem gałęzi main.

Zaawansowany Git

Podsumowanie

  • Scalanie fast-forward zachowuje prostą, liniową historię
  • Scalanie rekurencyjne zachowuje pełny kontekst historyczny
  • Scalanie rekurencyjne sprawdza się przy złożonym rozwoju

Polecenia scalania fast-forward

git merge <branch_name> # polecenie domyślne
git merge --ff-only <branch_name> # wymuś scalanie fast-forward

Polecenie scalania rekurencyjnego

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

Czas na ćwiczenia!

Zaawansowany Git

Preparing Video For Download...