EMZETT.
Login

Git: Merge-Konflikt lösen

Kurz: Ein Merge-Konflikt entsteht, wenn zwei Änderungen dieselbe Stelle betreffen; Git markiert die Stelle, und du entscheidest, welche Version gilt.

Genauer: Meldung: CONFLICT (content): Merge conflict in datei.txt und Automatic merge failed; fix conflicts and then commit the result. Git kann zwei Änderungen automatisch zusammenführen, solange sie verschiedene Stellen betreffen. Berühren beide dieselben Zeilen, muss ein Mensch entscheiden.

Im Detail

So sieht ein Konflikt aus

<<<<<<< HEAD
Anzeige in Blau
=======
Anzeige in Grün
>>>>>>> feature/farbe

Zwischen <<<<<<< und ======= steht deine Version (HEAD), zwischen ======= und >>>>>>> die fremde. Zum Lösen: eine Variante wählen, beide mischen oder neu schreiben, dann alle Markierungen löschen.

Lösungswege

  1. git status zeigt Dateien mit „both modified“.
  2. Datei öffnen (VS Code zeigt Schaltflächen Aktuelle/Eingehende Änderung übernehmen).
  3. Konflikt auflösen, die Markierungen <<<<<<<, =======, >>>>>>> entfernen.
  4. git add datei
  5. git commit (bei Merge) bzw. git rebase --continue (bei Rebase).
  6. Abbrechen: git merge --abort oder git rebase --abort bringt den Zustand von vorher zurück. Mit git mergetool öffnet ein grafisches Werkzeug.

Vorbeugen

  • Oft mit dem Hauptzweig abgleichen (git pull, git merge main), damit Unterschiede klein bleiben.
  • Kleine, kurze Branches und kleine Commits.
  • Im Team absprechen, wer an welchen Dateien arbeitet.
  • Formatierer einheitlich nutzen, damit keine Leerzeichen-Konflikte entstehen.
  • Nach dem Lösen testen: Ein Konflikt kann zu logisch falschem, aber syntaktisch gültigem Code führen. Bei Binärdateien oder Sperrdateien (package-lock.json) hilft oft: eine Seite wählen und neu erzeugen.

Siehe auch: Git: not a git repository