Merge — was es ist, wie merge funktioniert und Zusammenführungsstrategien

Autor: IT Sectr Veröffentlicht: 2026-08-01 Lesezeit: 9 Min.

Merge ist eine Branch-Zusammenführungsoperation in Git, die Änderungen aus zwei verschiedenen Entwicklungslinien in einen Ziel-Branch zusammenführt. Anders als rebase bewahrt merge die vollständige Branch-History, indem es einen speziellen Merge-Commit mit zwei Eltern erstellt. Laut der offiziellen Git-Dokumentation (2026) ist merge der sicherste Weg, Branches zusammenzuführen, da es die History nicht überschreibt und nachvollziehbar ist, wann und welche Branches gemergt wurden. Es ist die Standardwahl für das Zusammenführen in öffentlichen Branches wie main, develop und release.

Das Wichtigste

  • Merge — Zusammenführen von Branches mit Erstellung eines Merge-Commits, der die History beider Branches bewahrt.
  • Merge-Commit — ein spezieller Commit mit zwei Eltern, der das Zusammenführungsereignis festhält.
  • Zusammenführungsstrategien — recursive, octopus, ours, squash — jede für verschiedene Szenarien geeignet.
  • Konflikte — entstehen, wenn dieselben Zeilen in beiden Branches geändert wurden, und erfordern manuelle Lösung.
  • Sicherheit — merge ändert vorhandene Commits nicht, daher ist es sicher für öffentliche Branches.

Was ist merge in Git

Merge ist der git merge-Befehl, der Änderungen aus dem angegebenen Branch in den aktuellen Branch zusammenführt. Git findet den gemeinsamen Vorfahren (Basis-Commit), berechnet den Diff jedes Branches relativ zum Vorfahren und erstellt einen Merge-Commit mit der kombinierten Änderungsmenge. Das Ergebnis ist, dass der Ziel-Branch alle Änderungen aus dem gemergten Branch erhält.

Syntax: während du dich im Ziel-Branch (z. B. main) befindest, führe git merge feature aus. Git erstellt automatisch einen Merge-Commit, wenn keine Konflikte vorliegen. Die Standard-Merge-Commit-Nachricht lautet: „Merge branch 'feature' into main“. Du kannst die Nachricht mit dem Flag -m ändern oder im geöffneten Editor bearbeiten.

Merge ist eine nicht-destruktive Operation. Anders als rebase berührt merge vorhandene Commits nicht: sie behalten dieselben Hashes, Autoren und Daten. Dies macht merge zur einzig sicheren Methode, Branches zusammenzuführen, an denen mehrere Entwickler gleichzeitig arbeiten. Wenn etwas schiefgeht, kann merge mit git merge --abort abgebrochen werden.

bash
# Zum Ziel-Branch wechseln
git checkout main

# Feature-Branch mergen
git merge feature

# Ergebnis — Merge-Commit mit zwei Eltern
git log --oneline --graph

# Merge mit benutzerdefinierter Nachricht
git merge feature -m "feat: integrate authentication module"

Merge-Typen: regular, squash, fast-forward

Git unterstützt drei Zusammenführungsmodi, die je nach gewünschtem Ergebnis gewählt werden. Der reguläre Merge (Standard) erstellt einen Merge-Commit. Squash-Merge fasst alle Commits des Feature-Branches in einem zusammen. Fast-forward verschiebt den Branch-Zeiger, ohne einen Commit zu erstellen, wenn möglich. Die Wahl des Modus hängt vom Workflow des Teams und den History-Regeln ab.

Regulärer Merge (--no-ff) — erstellt einen Merge-Commit, selbst wenn der Merge als Fast-forward durchgeführt werden könnte. Für den main-Branch empfohlen: ein Merge-Commit markiert eindeutig den Integrationspunkt des Features und ermöglicht es, alle Änderungen des Feature-Branches mit einem einzigen Revert des Merge-Commits rückgängig zu machen. GitHub verwendet diesen Modus standardmäßig beim Zusammenführen von PRs über den Merge-Button.

Squash-Merge (--squash) — sammelt alle Commits des Feature-Branches in einem einzigen Commit im Ziel-Branch. Nützlich, wenn die Entwurfshistorie des Feature-Branches main nicht verschmutzen soll. Nachteil: die Verbindung zu den ursprünglichen Commits geht verloren — man kann nicht sehen, wie das Feature Schritt für Schritt entwickelt wurde. GitHub verwendet diesen Modus bei Auswahl von „Squash and merge“ in einem PR.

Fast-forward (--ff) — wenn der Ziel-Branch seit der Abzweigung des Feature-Branches keine neuen Commits hat, verschiebt Git einfach den Zeiger nach vorne, ohne einen Merge-Commit zu erstellen. Die Historie bleibt linear. Das Flag --no-ff erzwingt einen Merge-Commit, während --ff-only einen Fehler ausgibt, wenn Fast-forward nicht möglich ist.

bash
# Merge-Commit erzwingen (für main empfohlen)
git merge --no-ff feature

# Squash-Merge — alle Commits in einem
git merge --squash feature
git commit -m "feat: add authentication"

# Fast-forward nur wenn möglich
git merge --ff-only feature

# Konfliktreichen Merge abbrechen
git merge --abort

Git-Zusammenführungsstrategien

Zusammenführungsstrategien bestimmen den Algorithmus, den Git zum Zusammenführen von Änderungen verwendet. Jede Strategie eignet sich für verschiedene Szenarien. Git wählt automatisch die passende Strategie, aber Entwickler können sie explizit mit dem Flag --strategy angeben. Das Verständnis der Strategien hilft, das Verhalten von Git bei komplexen Merges vorherzusagen.

Recursive — die Standardstrategie zum Zusammenführen von zwei Branches. Git findet den gemeinsamen Vorfahren, berechnet die Änderungen in jedem Branch und führt sie zusammen. Wenn ein gemeinsamer Vorfahr gefunden wird, behandelt recursive Dateiumbenennungen und -hinzufügungen korrekt. Bei Konflikten kann recursive zusätzliche Optionen verwenden: ours (automatisch unsere Version wählen) und theirs (deren Version wählen).

Octopus — zum gleichzeitigen Zusammenführen von mehr als zwei Branches: git merge feature1 feature2 feature3. Octopus unterstützt keine Konfliktlösung — alle Konflikte müssen vor dem Aufruf des Befehls gelöst werden. Es wird selten verwendet, hauptsächlich zum Zusammenführen mehrerer unabhängiger Branches, die garantiert nicht kollidieren (z. B. verschiedene Module).

StrategieAnzahl BranchesKonfliktlösung
Recursive2Automatisch + ours/theirs-Optionen
Octopus3+Nein — alle Konflikte müssen vorher gelöst werden
OursBeliebigWählt immer unsere Version, ignoriert fremde Änderungen
Subtree2Für Subtree-Merges

Ours — eine spezielle Strategie, die Änderungen aus dem gemergten Branch vollständig ignoriert und den aktuellen Inhalt des Ziel-Branches beibehält. Ein Merge-Commit wird erstellt, aber der Inhalt bleibt unverändert. Nützlich, wenn du in der History den Merge-Vorgang festhalten, aber tatsächlich alle Änderungen aus dem anderen Branch ablehnen möchtest.

Merge-Konflikte lösen

Ein Merge-Konflikt tritt auf, wenn dieselben Zeilen einer Datei in beiden Branches unterschiedlich geändert wurden. Git kann nicht automatisch bestimmen, welche Version korrekt ist, und pausiert den Merge. Ein Konflikt kann auch entstehen, wenn eine Datei in einem Branch umbenannt und in einem anderen geändert wird, oder wenn dieselbe Datei gleichzeitig gelöscht und geändert wird.

Lösungsprozess: Git markiert konfliktbehaftete Dateien mit Markierungen. Die Datei zeigt Abschnitte mit <<<<<<< HEAD (unsere Version), ======= (Trennzeichen) und >>>>>>> feature (deren Version). Der Entwickler bearbeitet den konfliktbehafteten Abschnitt manuell, wählt die gewünschten Zeilen aus beiden Versionen aus, entfernt die Markierungen, speichert die Datei und fügt sie mit git add zum Index hinzu.

Für die visuelle Konfliktlösung unterstützt Git mergetool — ein externes Vergleichswerkzeug. Beliebte Mergetools: Meld, KDiff3, Beyond Compare, VS Code (integrierter Konflikt-Editor). Mergetool zeigt drei Fenster an: unsere Version, deren Version und das Ergebnis. Der Entwickler wählt visuell Codeblöcke für die Aufnahme in die endgültige Datei aus.

bash
# Merge starten und Konflikt erkennen
git merge feature
# KONFLIKT (Inhalt): Merge-Konflikt in src/main.swift

# Konfliktdateien prüfen
git status

# Visuelles Mergetool öffnen
git mergetool

# Nach Lösung — add und commit
git add src/main.swift
git commit

# Merge abbrechen
git merge --abort

Wann merge statt rebase wählen

Merge ist rebase vorzuziehen in mehreren Schlüsselsituationen. Erstens: bei der Arbeit mit öffentlichen Branches, die für andere Entwickler zugänglich sind. Merge überschreibt die Historie nicht, sodass Kollegen sicher synchronisieren können. Rebase in einem öffentlichen Branch erzeugt eine abweichende Historie und verursacht Konflikte bei allen, die bereits die alten Commits haben.

Zweite Situation: beim Abschließen eines Feature-Branches. Die meisten Teams bevorzugen merge (mit dem Flag --no-ff) in main, um den Integrationszeitpunkt des Features festzuhalten. Dies vereinfacht die Navigation in der Historie und ermöglicht es, ein ganzes Feature mit einem einzigen git revert des Merge-Commits rückgängig zu machen. GitHub Flow bietet standardmäßig drei Merge-Optionen: einfachen Merge, Squash-Merge und Rebase-Merge.

Dritte Situation: bei der Arbeit mit einem überprüften Pull-Request. GitHub und GitLab bieten einen Merge-Button mit verschiedenen Optionen. Merge (Create a merge commit) — vollständige Historie mit einem Merge-Commit. Squash and merge — saubere Historie ohne Entwicklungsdetails. Rebase and merge — lineare Historie ohne Merge-Commit, aber mit Umschreibung von Commits. Die Wahl hängt von den Teamregeln ab.

  • Öffentliche Branches (main, develop) — nur merge, niemals rebase.
  • PR-Abschluss — merge mit --no-ff zur Markierung des Integrationspunkts.
  • Branches mit fremden Commits — merge überschreibt fremde Arbeit nicht.
  • Vor dem Release — merge ist sicherer, da es weniger Risiken birgt.
  • Gemeinsamer Branch — wenn mehrere Entwickler an einem Branch arbeiten, ist merge Pflicht.

Bewährte Praktiken für Branch-Zusammenführung

Erste Regel: vor dem Merge stets auf der aktuellsten Version des Ziel-Branches sein. Führe git checkout main && git pull aus, bevor du den Feature-Branch mergst. Dies minimiert Konflikte und stellt sicher, dass der Merge-Commit alle aktuellen Änderungen enthält. Wenn der Ziel-Branch deutlich voraus ist, führe zuerst git merge main innerhalb des Feature-Branches aus, um Konflikte in dessen Kontext zu lösen.

Zweite Regel: Code nach dem Merge testen. Merge kann das Verhalten ändern, selbst wenn es keine Konflikte gab. Die CI/CD-Pipeline sollte Tests auf dem Merge-Commit ausführen, bevor sie in die Produktion sendet. Einige Teams verwenden Merge-Gates — obligatorische Prüfungen, die den Merge blockieren, bis sie bestanden sind.

Dritte Regel: Merge-Commits dokumentieren. Die Standardnachricht „Merge branch 'feature' into main“ ist wenig nützlich. Es wird empfohlen, eine Beschreibung dessen hinzuzufügen, was gemergt wurde: „Merge authentication module: login, registration, password recovery“. Dies vereinfacht die Historienanalyse und die Suche nach Regressionen. In großen Projekten werden Merge-Commits automatisch aus dem PR-Titel generiert.

  • Aktualität — vor dem Merge sicherstellen, dass der Ziel-Branch aktuell ist (git pull).
  • Tests — CI/CD sollte Tests auf dem resultierenden Merge-Commit ausführen.
  • Aussagekräftige Nachrichten — im Merge-Commit angeben, welches Feature gemergt wurde.
  • Häufigkeit — Feature-Branches so früh und oft wie möglich mergen (maximal eine Woche).
  • Rückgängigmachen — git revert eines Merge-Commits macht das gesamte Feature rückgängig.

Häufig gestellte Fragen

Was bedeutet es, Branches in Git zu mergen?

Mergen bedeutet, git merge auszuführen, um Änderungen von einem Branch in einen anderen zu übernehmen. Das Ergebnis ist ein Merge-Commit, der das Merge-Ereignis festhält und Änderungen aus beiden Branches enthält. Dies ist die primäre Methode zur Integration von Feature-Branches in main, develop oder release in Git Flow.

Worin unterscheidet sich Squash-Merge vom regulären Merge?

Squash-Merge fasst alle Commits des Feature-Branches in einem einzigen Commit im Ziel-Branch zusammen und verliert dabei die Zwischenentwicklungshistorie. Der reguläre Merge erstellt einen Merge-Commit, der alle Commits des Feature-Branches bewahrt. Squash-Merge ergibt eine saubere Historie, erlaubt aber nicht die Nachverfolgung der schrittweisen Feature-Entwicklung.

Wie löst man einen Merge-Konflikt in Git?

Öffne die konfliktbehaftete Datei, finde die Abschnitte mit den Markierungen <<<<<<< HEAD und >>>>>>>. Bearbeite den Inhalt, behalte die benötigten Zeilen aus beiden Versionen, entferne die Markierungen. Speichere die Datei, führe git add und git commit aus. Du kannst git mergetool zur visuellen Lösung verwenden.

Wann sollte man merge statt rebase verwenden?

Merge wird immer für öffentliche Branches (main, develop, release) verwendet, da es die Historie nicht überschreibt. Rebase wird in persönlichen Feature-Branches vor ihrer Veröffentlichung angewendet. Sobald ein Branch Teil des gemeinsamen Repositories geworden ist und Kollegen darauf zugegriffen haben, ist nur noch merge erlaubt.

Wie macht man einen Merge in Git rückgängig?

Vor Abschluss des Merges (während eines Konflikts) — git merge --abort bricht den Merge vollständig ab. Nach Abschluss — git revert <merge-commit-hash> -m 1 erstellt einen rückgängig machenden Commit. Das Flag -m 1 gibt an, welcher Eltern-Branch beibehalten werden soll (der Ziel-Branch). Git revert ist sicherer als git reset für veröffentlichte Branches.

Zusammenfassung

  • Merge — sicheres Zusammenführen von Branches, das die Historie bewahrt und einen Merge-Commit mit zwei Eltern erstellt.
  • Zusammenführungsmodi — regulär (--no-ff), Squash (--squash) und Fast-forward (--ff) für verschiedene Zwecke.
  • Strategien — recursive (Standard), octopus (3+ Branches), ours (fremde Änderungen ignorieren).
  • Konflikte — werden manuell durch Bearbeiten markierter Abschnitte oder mit mergetool gelöst.
  • Sicherheit — merge ändert vorhandene Commits nicht, daher sicher für öffentliche Branches.
  • Squash-Merge — fasst alle Commits in einem zusammen und verliert die Zwischenentwicklungshistorie.
  • Merge rückgängig machen — git revert eines Merge-Commits mit dem Flag -m 1 für sicheres Rückgängigmachen veröffentlichter Änderungen.

Wir entwickeln eine mobile Applikation schlüsselfertig

IT Sectr entwickelt seit 2017 iOS- und Android-Apps für Startups und Unternehmen. Wir beraten Sie und schlagen die beste Lösung vor.

Projekt besprechen

Lesen Sie auch