Zum Inhalt springen
Git & GitHub Anfänger 25 min

Merge - Branches zusammenführen

Lerne, wie du Branches mit git merge zusammenführst und verstehe die verschiedenen Merge-Strategien.

Aktualisiert:

Du hast an einem Feature in einem eigenen Branch gearbeitet und bist fertig. Jetzt ist es Zeit, deine Arbeit zurueck in den main-Branch zu bringen. Diesen Vorgang nennt man Merge - das Zusammenfuehren von Branches. In diesem Kapitel lernst du, wie Merges funktionieren und welche Arten es gibt.

Was ist ein Merge?

Ein Merge kombiniert die Aenderungen aus einem Branch mit einem anderen. Typischerweise mergst du einen Feature-Branch in main:

Vor dem Merge:

main    ───●───●───●
                \
feature          ●───●───●

Nach dem Merge:

main    ───●───●───●───────●  (Merge-Commit)
                \         /
feature          ●───●───●

Einen Branch mergen

Der grundlegende Ablauf

# 1. Zum Ziel-Branch wechseln (wohin gemergt werden soll)
git switch main

# 2. Den Feature-Branch mergen
git merge feature/navigation
Merge made by the 'ort' strategy.
 index.html | 10 ++++++++++
 style.css  |  5 +++++
 2 files changed, 15 insertions(+)

Wichtig: Du musst immer auf dem Branch sein, in den du mergen moechtest!

Schritt fuer Schritt

# Status pruefen
git switch main
git status
On branch main
nothing to commit, working tree clean
# Merge durchfuehren
git merge feature/navigation
# Ergebnis pruefen
git log --oneline --graph
*   d4e5f6a (HEAD -> main) Merge branch 'feature/navigation'
|\
| * a3f4b2c (feature/navigation) style: Navigation-Styling
| * 8e1d9f0 feat: Navigation-Grundstruktur
|/
* 5c2a1b3 Initiales Projekt

Die zwei Arten von Merges

Fast-Forward Merge

Wenn main seit dem Abzweigen des Feature-Branches keine neuen Commits bekommen hat, macht Git einen Fast-Forward Merge. Dabei wird der main-Zeiger einfach vorgeschoben:

Vor dem Merge:

main    ───●───●
                \
feature          ●───●───●

Nach dem Fast-Forward Merge:

main    ───●───●───●───●───●
                (feature)
git switch main
git merge feature/navigation
Updating 5c2a1b3..a3f4b2c
Fast-forward
 index.html | 10 ++++++++++
 2 files changed, 10 insertions(+)

Git sagt dir Fast-forward - es wurde kein extra Merge-Commit erstellt.

Three-Way Merge (Merge-Commit)

Wenn beide Branches neue Commits haben, erstellt Git einen Merge-Commit:

Vor dem Merge:

main    ───●───●───●───●
                \
feature          ●───●

Nach dem Three-Way Merge:

main    ───●───●───●───●───●  (Merge-Commit)
                \         /
feature          ●───●───●
git switch main
git merge feature/navigation
Merge made by the 'ort' strategy.

Git oeffnet deinen Editor fuer eine Merge-Commit-Message (Standard: “Merge branch ‘feature/navigation’”).

Fast-Forward verhindern

Manchmal moechtest du auch bei einem Fast-Forward einen Merge-Commit erstellen, um die Branch-Historie zu erhalten:

git merge --no-ff feature/navigation
Merge made by the 'ort' strategy.
Merge-ArtWannErgebnis
Fast-Forwardmain hat keine neuen CommitsZeiger wird vorgeschoben
Three-WayBeide Branches haben neue CommitsMerge-Commit wird erstellt
--no-ffErzwungenImmer ein Merge-Commit

Ein vollstaendiges Merge-Beispiel

Projekt vorbereiten

# Neues Projekt erstellen
mkdir merge-demo
cd merge-demo
git init

# Erste Datei erstellen
echo "# Meine Webseite" > index.html
git add index.html
git commit -m "Initiales Projekt"

Feature-Branch erstellen und bearbeiten

# Feature-Branch erstellen
git switch -c feature/about

# About-Seite erstellen
echo "<h1>Ueber mich</h1>" > about.html
git add about.html
git commit -m "feat: About-Seite erstellt"

# About-Seite erweitern
echo "<p>Ich lerne Git!</p>" >> about.html
git add about.html
git commit -m "feat: Beschreibung zur About-Seite hinzugefuegt"

Zurueck zu main und mergen

# Zu main wechseln
git switch main

# Feature-Branch mergen
git merge feature/about
Updating 5c2a1b3..b2c3d4e
Fast-forward
 about.html | 2 ++
 1 file changed, 2 insertions(+)
 create mode 100644 about.html

Aufraemen

# Feature-Branch loeschen
git branch -d feature/about
Deleted branch feature/about (was b2c3d4e).

Merge abbrechen

Wenn du einen Merge gestartet hast und abbrechen moechtest (z.B. wegen Konflikten):

git merge --abort

Das setzt alles auf den Zustand vor dem Merge zurueck.

Merge pruefen, bevor du ihn machst

Was wuerde gemergt werden?

# Zeige die Commits, die gemergt werden
git log main..feature/navigation --oneline
a3f4b2c style: Navigation-Styling
8e1d9f0 feat: Navigation-Grundstruktur

Gibt es Konflikte?

# Trockenlauf - Merge simulieren
git merge --no-commit --no-ff feature/navigation

# Wenn alles gut aussieht:
git merge --abort  # Zuruecksetzen
# oder
git commit         # Merge abschliessen

Welche Dateien aendern sich?

git diff main..feature/navigation --name-only
index.html
style.css

Mehrere Branches mergen

Du kannst auch mehrere Branches nacheinander mergen:

git switch main

# Erst das eine Feature
git merge feature/navigation
# Dann das andere
git merge feature/footer

Oder sogar gleichzeitig (Octopus-Merge):

git merge feature/navigation feature/footer

Best Practices fuer Merges

1. Immer auf aktuellem Stand mergen

git switch main
git pull                        # Neueste Aenderungen holen
git switch feature/navigation
git merge main                  # main in Feature-Branch mergen (Updates holen)
# ... eventuelle Konflikte loesen ...
git switch main
git merge feature/navigation    # Feature in main mergen

2. Feature-Branch vor dem Merge testen

# Im Feature-Branch: Alles testen!
git switch feature/navigation
# ... Tests ausfuehren, Seite im Browser pruefen ...
# Erst wenn alles funktioniert:
git switch main
git merge feature/navigation

3. Branch nach dem Merge aufraeumen

# Lokalen Branch loeschen
git branch -d feature/navigation

# Remote-Branch loeschen (wenn auf GitHub)
git push origin --delete feature/navigation

4. Commit-Historie sauber halten

# Mit --no-ff fuer einen klaren Merge-Commit
git merge --no-ff feature/navigation -m "Merge: Navigation-Feature abgeschlossen"

Uebungen

  1. Erstelle einen Feature-Branch, mache zwei Commits und merge ihn in main
  2. Erstelle einen Branch, mache Commits in beiden Branches und beobachte den Three-Way-Merge
  3. Pruefe vor einem Merge mit git log, welche Commits gemergt werden
  4. Uebe das Abbrechen eines Merges mit git merge --abort
  5. Loesche den Feature-Branch nach dem Merge

Was kommt als Naechstes?

Im naechsten Kapitel lernst du, wie du Merge-Konflikte loest. Denn manchmal aendern zwei Branches die gleiche Stelle im Code - und dann muss Git dich um Hilfe bitten.

Zusammenfassung

  • git merge branch-name fuehrt den genannten Branch in den aktuellen Branch zusammen
  • Es gibt Fast-Forward (einfach, linear) und Three-Way (Merge-Commit) Merges
  • --no-ff erzwingt einen Merge-Commit fuer bessere Nachvollziehbarkeit
  • git merge --abort bricht einen laufenden Merge ab
  • Pruefe vor dem Merge mit git log, welche Commits gemergt werden
  • Nach dem Merge solltest du den Feature-Branch loeschen
  • Halte main immer aktuell, bevor du mergst

Pro-Tipp: Viele Teams nutzen die Regel: “Merge main in deinen Feature-Branch, bevor du den Feature-Branch in main mergst.” So stellst du sicher, dass eventuelle Konflikte in deinem Branch geloest werden und nicht in main.

Zurück zum Git & GitHub Kurs