Förstå sammanslagningstyper

Avancerad Git

Amanda Crawford-Adamo

Software and Data Engineer

Jag är Amanda

En bild på Amanda

Avancerad Git

Vad är git merge?

Git-kommandot merge:

git merge
  • Kombinerar ändringar från en gren till en annan
  • Hittar den gemensamma basen mellan två grenar
  • Använd olika sammanslagningsstrategier

Väg där två vägar möts med två bilar som kör ihop på samma väg

Avancerad Git

Fast-forward merge

Vad är fast-forward merge?

  • Håller historiken enkel och linjär
  • Passar kortlivade grenar med enkla ändringar

$$

När du inte bör använda det

  • När grenhistoriken behöver bevaras
  • Komplex funktionsutveckling i långlivade grenar
  • Sammanslagningskonflikter – fast-forward misslyckas direkt!
Avancerad Git

Fast-forward merge (före)

Ett diagram med två grenar: main och feature. Main har två commits. Feature-grenen förgrenar sig efter mains senaste commit och har en extra commit.

Avancerad Git

Syntax för fast-forward merge

Git merge – fast-forward som standard

git checkout main
git merge feature_branch

Tvinga Git att köra fast-forward merge

git merge <branch> --ff-only

Exempel

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

Fast-forward merge (efter)

Ett diagram med två grenar: main och feature. Main har tre commits. Feature-grenen förgrenar sig efter mains andra commit och har en extra commit. Mains tredje commit är en kopia av feature-grenens senaste commit.

Avancerad Git

Rekursiv merge

Vad är rekursiv merge?

  • Skapar en merge-commit med två föräldrar
  • Bevarar hela projekthistoriken
  • Passar långlivade grenar
  • Bibehåller grenstrukturen

$$

När du inte bör använda det

  • När du vill ha en enkel och linjär historik
  • Snabba och mindre ändringar
Avancerad Git

Rekursiv merge (före)

Ett diagram med två grenar: main och feature. Main har tre commits. Feature-grenen förgrenar sig efter mains första commit och har ytterligare två commits.

Avancerad Git

Syntax för rekursiv merge

Kommando för rekursiv merge:

git merge --no-ff <branch>

Exempel

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

Rekursiv merge (efter)

Ett diagram med två grenar: main och feature. Main har sex commits. Feature-grenen förgrenar sig efter mains senaste commit och har ytterligare två commits. Mains sex commits är en blandning av commits från både main och feature. Mains senaste commit är ett merge-commitobjekt med två föräldrar: feature-grenens senaste commit och mains föregående commit.

Avancerad Git

Sammanfattning

  • Fast-forward merge håller historiken enkel och linjär
  • Rekursiv merge bevarar hela historikens kontext
  • Rekursiv merge passar mer komplex utveckling

Kommandon för fast-forward merge

git merge <branch_name> # standardkommando
git merge --ff-only <branch_name> # tvinga fast-forward merge

Kommando för rekursiv merge

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

Nu kör vi en övning!

Avancerad Git

Preparing Video For Download...