Розуміння типів злиття

Просунуте Git

Amanda Crawford-Adamo

Software and Data Engineer

Я — Аманда

Фото Аманди

Просунуте Git

Що таке git merge?

Команда Git merge:

git merge
  • Поєднує зміни з однієї гілки в іншу
  • Знаходить спільну базу між двома гілками
  • Доступні різні стратегії злиття

Дорога, де дві смуги зливаються; два авто на одній дорозі

Просунуте Git

Fast-forward merge

Що таке fast-forward merge?

  • Зберігає просту, лінійну історію
  • Ідеально для короткоживучих гілок із простими змінами

$$

Коли не варто

  • Потрібно зберегти історію гілок
  • Складна розробка у довгоживучих гілках
  • Конфлікт злиття між гілками — fast-forward одразу падає!
Просунуте Git

Fast-forward merge (до)

Граф із двома гілками: main і feature. Main має два коміти. Feature відгалужується після останнього коміту main і має додатковий коміт у своїй гілці.

Просунуте Git

Синтаксис fast-forward merge

Git Merge Fast Forward за замовчуванням

git checkout main
git merge feature_branch

Примусово виконати Fast Forward

git merge <branch> --ff-only

Приклад

git checkout main
git merge feature_branch --ff-only
Просунуте Git

Fast-forward merge (після)

Граф із двома гілками: main і feature. Main має три коміти. Feature відгалужується після другого коміту main і має додатковий коміт. Третій коміт main — це копія останнього коміту feature.

Просунуте Git

Recursive merge

Що таке recursive merge?

  • Створює коміт злиття з двома батьками
  • Зберігає всю історію проєкту
  • Ідеально для довгоживучих гілок
  • Підтримує структуру гілкування

$$

Коли не варто

  • Коли потрібно просту, лінійну історію
  • Швидкі та незначні зміни
Просунуте Git

Recursive merge (до)

Граф із двома гілками: main і feature. Main має три коміти. Feature відгалужується після першого коміту main і має ще два коміти.

Просунуте Git

Синтаксис recursive merge

Команда Recursive Merge:

git merge --no-ff <branch>

Приклад

$ 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.
...
Просунуте Git

Recursive merge (після)

Граф із двома гілками: main і feature. Main має шість комітів. Feature відгалужується після останнього коміту main і має ще два коміти. Шість комітів main — це чергування комітів обох гілок. Останній коміт main — це коміт злиття з двома батьками: останнім комітом feature та попереднім останнім комітом main.

Просунуте Git

Підсумок

  • Fast-forward злиття зберігає історію простою та лінійною
  • Recursive злиття зберігає історичний контекст
  • Recursive підходить для складнішої розробки

Команди Fast Forward Merge

git merge <branch_name> # команда за замовчуванням
git merge --ff-only <branch_name> # примусовий fast-forward

Команда Recursive Merge

git merge --no-ff <branch_name>
Просунуте Git

Давайте потренуємось!

Просунуте Git

Preparing Video For Download...