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.
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.
Die betroffenen Dateien finden
Git listet auf, welche Dateien im Konflikt stehen. Der Status zeigt sie unter „both modified“:
git status
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.
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.
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.
Git meldet „detached HEAD“? Du stehst nicht auf einem Branch, sondern direkt auf einem Commit — Änderungen hier gehen ohne Gegenmaßnahme leicht verloren.
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