Merge-typen begrijpen

Geavanceerd Git

Amanda Crawford-Adamo

Software and Data Engineer

Ik ben Amanda

Een foto van Amanda

Geavanceerd Git

Wat is git merge?

Git merge-commando:

git merge
  • Voegt wijzigingen van de ene branch samen in een andere
  • Zoekt de gemeenschappelijke basis tussen twee branches
  • Gebruikt verschillende merge-strategieën

Weg waar twee wegen samenkomen met twee auto's die op dezelfde weg invoegen

Geavanceerd Git

Fast-forward merge

Wat is fast-forward merge?

  • Houdt een simpele, rechte geschiedenis
  • Ideaal voor kortlevende branches met kleine wijzigingen

$$

Wanneer niet gebruiken

  • Moet branchgeschiedenis behouden blijven
  • Complexe features in langlevende branches
  • Mergeconflict tussen branches — fast-forward faalt direct!
Geavanceerd Git

Fast-forward merge (voor)

Een grafiek met twee branches: main en feature. Main heeft twee commits. Feature vertakt na de laatste commit van main met een extra commit.

Geavanceerd Git

Fast-forward merge-syntaxis

Git merge fast-forward (standaard)

git checkout main
git merge feature_branch

Forceer fast-forward merge

git merge <branch> --ff-only

Voorbeeld

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

Fast-forward merge (na)

Een grafiek met twee branches: main en feature. Main heeft drie commits. Feature vertakt na de tweede commit van main met een extra commit. De derde commit van main is een kopie van de laatste feature-commit.

Geavanceerd Git

Recursive merge

Wat is een recursive merge?

  • Maakt een merge-commit met twee ouders
  • Behoudt de volledige projectgeschiedenis
  • Ideaal voor langlevende branches
  • Houdt de branch-structuur intact

$$

Wanneer niet gebruiken

  • Als je een simpele, lineaire geschiedenis wilt
  • Voor snelle, kleine wijzigingen
Geavanceerd Git

Recursive merge (voor)

Een grafiek met twee branches: main en feature. Main heeft drie commits. Feature vertakt na de eerste commit van main met twee extra commits.

Geavanceerd Git

Recursive merge-syntaxis

Recursive merge-commando:

git merge --no-ff <branch>

Voorbeeld

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

Recursive merge (na)

Een grafiek met twee branches: main en feature. Main heeft zes commits. Feature vertakt na de laatste commit van main met twee extra commits. De zes commits van main zijn een verweving van alle main- en feature-commits samen. De laatste commit van main is een merge-commit met twee ouders: de laatste feature-commit en de vorige laatste commit van main.

Geavanceerd Git

Samenvatting

  • Fast-forward merges houden de historie simpel en lineair
  • Recursive merges behouden context
  • Recursive merges zijn beter voor complexere ontwikkeling

Fast-forward-commando's

git merge <branch_name> # standaardcommando
git merge --ff-only <branch_name> # forceer fast-forward

Recursive-commando

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

Laten we oefenen!

Geavanceerd Git

Preparing Video For Download...