Layer 8Ehrlicher Tech-Support
SoftwareSchweregrad: LästigCONFLICT

Git: Merge-Konflikt (CONFLICT)

Git meldet einen Konflikt beim Zusammenführen? Beide Seiten haben dieselbe Stelle geändert. Git kann nicht raten, welche gilt — das entscheidest du.

Aufwand:
ca. 20 Min.

Das Symptom

Beim Zusammenführen zweier Zweige oder beim Ziehen von Änderungen bricht Git ab und meldet CONFLICT (content): Merge conflict in <datei>. In den betroffenen Dateien tauchen kryptische Zeilen mit spitzen Klammern auf, und bis der Konflikt gelöst ist, lässt sich nicht weiterarbeiten.

Die „Layer 8“-Wahrheit

Ein Merge-Konflikt wird oft als Katastrophe erlebt, ist aber im Grunde ein Zeichen von Sorgfalt. Git führt alles, was sich nicht widerspricht, automatisch zusammen — und zwar erstaunlich viel. Nur wenn zwei Seiten exakt dieselbe Zeile auf unterschiedliche Weise geändert haben, hält es inne. Denn hier gibt es keine richtige automatische Antwort: Git kann unmöglich wissen, ob deine Änderung, die des Kollegen oder eine Mischung aus beiden gelten soll. Statt zu raten und womöglich Arbeit zu vernichten, fragt es nach.

Die Markierungen in der Datei sind genau diese Frage, sichtbar gemacht: oben die eine Version, unten die andere. Die Lösung besteht darin, die Datei in den gewünschten Endzustand zu bringen und die Markierungen vollständig zu entfernen — ein häufiger Anfängerfehler ist, eine Trennzeile stehen zu lassen. Danach markiert man die Datei als gelöst und schließt den Merge ab. Und wenn es zu unübersichtlich wird, ist der Abbruch keine Schande: Er stellt den Zustand von vorher her, sodass man mit klarem Kopf neu ansetzen kann.

Die echte, verifizierte Lösung

1000 % faktenbasiert. Jeder Befehl ist real, jeder Pfad existiert. Schritt für Schritt:

  1. 1.

    Den Konflikt verstehen

    Ein Merge-Konflikt entsteht, wenn zwei Zweige dieselbe Zeile unterschiedlich geändert haben. Git kann automatisch zusammenführen, was sich nicht überschneidet — aber bei einer echten Kollision kann es nicht wissen, welche Version die richtige ist, und übergibt die Entscheidung an dich. Das ist kein Fehler, sondern eine Rückfrage.

  2. 2.

    Die betroffenen Dateien finden

    Git listet auf, welche Dateien im Konflikt stehen. Der Status zeigt sie unter „both modified“:

    git status
    
  3. 3.

    Die Konfliktmarkierungen auflösen

    In den betroffenen Dateien markiert Git die Kollision mit Zeilen aus spitzen Klammern und Gleichheitszeichen. Der obere Block ist die eine Version, der untere die andere. Die Datei so bearbeiten, dass der gewünschte Endzustand dasteht, und alle Markierungen restlos entfernen — auch die Trennzeilen.

  4. 4.

    Die Auflösung abschließen

    Die bereinigten Dateien als gelöst markieren und den Merge abschließen. Git erstellt dann den Merge-Commit:

    git add <datei>
    git commit
    
  5. 5.

    Im Zweifel abbrechen

    Wird die Lage unübersichtlich, lässt sich der Merge gefahrlos abbrechen und der Zustand von vor dem Zusammenführen wiederherstellen. Dann in Ruhe erneut beginnen:

    git merge --abort
    

Häufige Fragen (FAQ)

?Ein Merge-Konflikt klingt bedrohlich. Ist etwas kaputtgegangen?

Nein. Git hat lediglich zwei Änderungen an derselben Stelle gefunden und weigert sich zu raten, welche gelten soll. Nichts ist verloren, nichts ist überschrieben – der Vorgang steht nur still und wartet auf eine Entscheidung, die kein Werkzeug treffen kann.

?Ich habe mich verrannt. Kann ich den Merge rückgängig machen?

Ja, jederzeit. git merge --abort stellt exakt den Zustand von vor dem Merge wieder her. Das ist keine Niederlage, sondern eine völlig normale Rückzugsoption – besser als ein halb aufgelöster Konflikt, der später niemandem mehr erklärbar ist.

Belege

Diese Seite ist gegen die folgenden Primärquellen geprüft – Hersteller, Standard oder Gesetzestext. Wer es nicht glaubt, muss es nicht: Da steht, wo es nachzulesen ist.

Zuletzt geprüft am . Dokumentation altert – ein Datum daneben ist der einzige ehrliche Umgang damit.

Auch zu finden unter

Verwandte Fehler

SWLästigdetached HEAD

Git: detached HEAD state

Git meldet „detached HEAD“? Du stehst nicht auf einem Branch, sondern direkt auf einem Commit — Änderungen hier gehen ohne Gegenmaßnahme leicht verloren.

SWLästigNot possible to fast-forward, aborting.

git pull: Not possible to fast-forward, aborting

git pull bricht ab, sobald eigener und entfernter Zweig auseinandergelaufen sind. Laut Git 2.55 ist --ff-only die Voreinstellung, nicht der Merge.

SWAnfängerfehlerYour local changes would be overwritten

git: local changes would be overwritten by merge

git stoppt mit 'Your local changes would be overwritten by merge/checkout'? So rettest du deine Änderungen per commit oder stash, statt sie zu verlieren.

SWAnfängerfehlerfatal: refusing to merge unrelated histories

Git: refusing to merge unrelated histories

git pull scheitert mit 'refusing to merge unrelated histories'? So führst du zwei getrennt entstandene Repos kontrolliert zusammen.

SWLästigUnsupportedClassVersionError

Java: UnsupportedClassVersionError

Das Programm wurde mit einem neueren Java kompiliert, als es ausführt? Diese Meldung nennt sogar die Versionsnummern — man muss sie nur übersetzen.