Merge-Typen verstehen

Fortgeschrittenes Git

Amanda Crawford-Adamo

Software and Data Engineer

Ich bin Amanda

Ein Bild von Amanda

Fortgeschrittenes Git

Was ist git merge?

Git-Merge-Befehl:

git merge
  • Kombiniert Änderungen von einem Branch in einen anderen
  • Findet die gemeinsame Basis zweier Branches
  • Verschiedene Merge-Strategien möglich

Straße, auf der zwei Wege zusammenführen; zwei Autos fahren nun auf derselben Straße

Fortgeschrittenes Git

Fast-Forward-Merge

Was ist ein Fast-Forward-Merge?

  • Hält die Historie schlicht und geradlinig
  • Ideal für kurzlebige Branches mit kleinen Änderungen

$$

Wann nicht nutzen

  • Branch-Historie soll erhalten bleiben
  • Komplexe Features in langlebigen Branches
  • Merge-Konflikt zwischen Branches – Fast Forward bricht sofort ab!
Fortgeschrittenes Git

Fast-Forward-Merge (vorher)

Ein Diagramm mit zwei Branches: main und feature branch. main hat zwei Commits. Der Feature-Branch zweigt nach dem neuesten main-Commit ab und hat einen zusätzlichen Commit.

Fortgeschrittenes Git

Fast-Forward-Merge: Syntax

Git Merge Fast Forward – Standard

git checkout main
git merge feature_branch

Fast Forward erzwingen

git merge <branch> --ff-only

Beispiel

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

Fast-Forward-Merge (nachher)

Ein Diagramm mit zwei Branches: main und feature branch. main hat drei Commits. Der Feature-Branch zweigt nach dem zweiten main-Commit ab und hat einen zusätzlichen Commit. Der dritte main-Commit ist eine Kopie des neuesten Feature-Commits.

Fortgeschrittenes Git

Rekursiver Merge

Was ist ein rekursiver Merge?

  • Erstellt einen Merge-Commit mit zwei Eltern
  • Erhält die gesamte Projekt-Historie
  • Ideal für langlebige Branches
  • Bewahrt die Verzweigungsstruktur

$$

Wann nicht nutzen

  • Wenn die Historie einfach und linear bleiben soll
  • Schnelle, kleine Änderungen
Fortgeschrittenes Git

Rekursiver Merge (vorher)

Ein Diagramm mit zwei Branches: main und feature branch. main hat drei Commits. Der Feature-Branch zweigt nach dem ersten main-Commit ab und hat zwei zusätzliche Commits.

Fortgeschrittenes Git

Rekursiver Merge: Syntax

Rekursiver Merge – Befehl:

git merge --no-ff <branch>

Beispiel

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

Rekursiver Merge (nachher)

Ein Diagramm mit zwei Branches: main und feature branch. main hat sechs Commits. Der Feature-Branch zweigt nach dem neuesten main-Commit ab und hat zwei zusätzliche Commits. Die sechs Commits in main sind eine Verflechtung aller main- und feature-Commits. Der neueste main-Commit ist ein Merge-Commit-Objekt mit zwei Eltern: dem neuesten Feature-Commit und dem vorherigen neuesten main-Commit.

Fortgeschrittenes Git

Zusammenfassung

  • Fast-Forward-Merges halten die Historie einfach und linear
  • Rekursive Merges bewahren den historischen Kontext
  • Rekursive Merges eignen sich besser für komplexere Entwicklungen

Fast-Forward-Merge-Befehle

git merge <branch_name> # Standardbefehl
git merge --ff-only <branch_name> # Fast-Forward erzwingen

Rekursiver Merge – Befehl

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

Lass uns üben!

Fortgeschrittenes Git

Preparing Video For Download...