A Zusammenführungskonflikt passiert, wenn Git Änderungen nicht automatisch kombinieren kann, weil zwei Zweige dieselben Zeilen unterschiedlich geändert haben. Es ist ein normaler Teil der Zusammenarbeit – kein Fehler, sondern nur Git, der Sie auffordert, eine Entscheidung zu treffen. So lösen Sie Konflikte souverän.
📋 Table of Contents
Was verursacht einen Zusammenführungskonflikt
Wenn Sie eine Zusammenführung (oder ein Rebase oder einen Pull) durchführen und beide Zweige denselben Teil einer Datei unterschiedlich geändert haben, kann Git nicht entscheiden, welche Änderung beibehalten werden soll – daher stoppt es und fragt Sie. Sie sehen:
$ git merge feature-branch
Auto-merging app.js
CONFLICT (content): Merge conflict in app.js
Automatic merge failed; fix conflicts and then commit the result.
Konfliktmarkierungen verstehen
<<<<<<< HEAD
const greeting = "Hello from main branch";
=======
const greeting = "Hi from feature branch";
>>>>>>> feature-branch
// The markers mean:
// <<<<<<< HEAD → your current branch's version (above =======)
// ======= → divider
// >>>>>>> feature-branch → the incoming branch's version (below =======)
Schritt-für-Schritt-Lösung
# 1. See which files have conflicts
git status
# Unmerged paths:
# both modified: app.js
# 2. Open each conflicted file and find the conflict markers
# 3. Edit the file to the desired final state - choose one version,
# combine both, or write something new. REMOVE the markers.
# Before (with markers):
<<<<<<< HEAD
const greeting = "Hello from main branch";
=======
const greeting = "Hi from feature branch";
>>>>>>> feature-branch
# After (resolved - you decided):
const greeting = "Hi from feature branch";
# 4. Stage the resolved file
git add app.js
# 5. Complete the merge
git commit # opens editor with a default merge message, or:
git commit -m "Merge feature-branch, resolve greeting conflict"
Mehrere Konflikte lösen
# A file (or several) may have multiple conflict sections.
# Find them all:
grep -n "<<<<<<<" app.js # find conflict markers
# Resolve each section, then verify none remain:
grep -rn "<<<<<<<\|=======\|>>>>>>>" .
# Should return nothing when all conflicts are resolved
# Then stage all resolved files and commit
git add .
git commit
Verwenden eines Zusammenführungstools
# Configure and use a visual merge tool (easier for complex conflicts)
git config --global merge.tool vscode
git config --global mergetool.vscode.cmd 'code --wait $MERGED'
# Launch the tool for conflicts
git mergetool
# VS Code (or your tool) shows current/incoming/result panes for easy resolution
# VS Code also has built-in conflict resolution - it shows
# "Accept Current / Accept Incoming / Accept Both" buttons inline
Abbruch einer Zusammenführung
# If you want to cancel the merge and start over
git merge --abort
# Returns your branch to the state before the merge - nothing changed
# For a conflicted rebase:
git rebase --abort
# For a conflicted pull:
git merge --abort # (a pull is a fetch + merge)
Konflikte während des Rebase lösen
# Rebase conflicts are resolved similarly, but per-commit:
git rebase main
# CONFLICT in app.js
# 1. Resolve the conflict in the file
# 2. Stage it
git add app.js
# 3. Continue the rebase (NOT commit)
git rebase --continue
# Repeat if more commits have conflicts
Konflikte verhindern
- Häufig ziehen: Wenn Sie mit dem Hauptzweig auf dem Laufenden bleiben, werden Divergenzen und Konflikte reduziert
- Führen Sie kleinere, gezielte Commits durch: Einfacher zusammenzuführen als große, weitreichende Änderungen
- Kommunizieren Sie mit Ihrem Team: Koordinieren Sie, wer woran arbeitet, um überlappende Änderungen zu vermeiden
- Häufig zusammenführen/neubasieren: Integrieren Sie Änderungen regelmäßig, anstatt Filialen wochenlang auseinanderlaufen zu lassen
- Äste kurzlebig halten: Lange laufende Zweige häufen Konflikte
Häufig gestellte Fragen
F: Was bedeuten die Konfliktmarkierungen?
A: <<<<<<< HEAD startet die Version Ihres aktuellen Zweigs,======= trennt es von der eingehenden Version und>>>>>>> branch-name beendet die eingehende Version. Bearbeiten Sie die Datei in den gewünschten Endzustand, entfernen Sie alle drei Markierungen, stellen Sie sie dann bereit und führen Sie einen Commit durch.
F: Wie wähle ich aus, welche Version ich behalten möchte?
A: Verstehen Sie, was jede Änderung bewirkt, und entscheiden Sie dann: Behalten Sie Ihre, behalten Sie ihre bei, kombinieren Sie beide oder schreiben Sie etwas Neues. Es gibt keine automatische „richtige“ Antwort – es hängt davon ab, was der Code tun soll. Wenn Sie unsicher sind, fragen Sie die Person, die die andere Änderung vorgenommen hat. Bearbeiten Sie den korrekten Endzustand.
F: Ich habe bei der Lösung einen Fehler gemacht. Wie fange ich von vorne an?
A: Wenn Sie noch keinen Commit durchgeführt haben, führen Siegit merge --abortaus (odergit rebase --abort), um abzubrechen und zum Zustand vor dem Zusammenführen zurückzukehren. Starten Sie dann die Zusammenführung erneut. Wenn Sie bereits eine fehlerhafte Lösung festgeschrieben haben, können Sie den Zusammenführungs-Commit rückgängig machen oder zurücksetzen.
F: Woher weiß ich, dass alle Konflikte gelöst sind?
A: Führen Siegit statusaus (keine nicht mehr zusammengeführten Pfade übrig) und suchen Sie nach verbleibenden Markierungen:grep -rn "<<<<<<<" . sollte nichts zurückgeben. Übrig gebliebene Konfliktmarkierungen in Dateien verursachen Fehler. Stellen Sie daher vor dem Festschreiben immer sicher, dass keine Konfliktmarkierungen mehr vorhanden sind.
F: Warum erhalte ich beim Rebase immer denselben Konflikt?
A: Rebase wendet Ihre Commits einzeln an, sodass ein Konflikt bei mehreren Commits auftreten kann, die denselben Code betreffen. Lösen Sie jedes auf,git add, undgit rebase --continue. Wenn es wirklich repetitiv ist, ziehen Siegit rererein Betracht (Aufgezeichnete Auflösung wiederverwenden) oder zusammenführen statt umbasieren.
Fazit
Zusammenführungskonflikte sind ein normaler Teil der Zusammenarbeit, keine Fehler – Git fordert Sie auf, zu entscheiden, wann zwei Zweige denselben Code unterschiedlich geändert haben. Der Auflösungsprozess:Konfliktdateien mitgit statusfinden , öffnen Sie sie und suchen Sie die Konfliktmarkierungen (<<<<<<< HEAD / ======= / >>>>>>>), bearbeiten Sie sie bis zum gewünschten Endzustand und entfernen Sie die Markierungen, danngit add undgit commit. Verwenden Sie für komplexe Konflikte ein visuelles Zusammenführungstool (VS-Code) undgit merge --abort um bei Bedarf von vorne zu beginnen. Lösen Sie während des Rebase pro Commit auf und verwenden Siegit rebase --continue. Vermeiden Sie Konflikte, indem Sie häufig ziehen, kleine Commits durchführen und die Zweige kurzlebig halten. Sobald Sie die Markierungen und den Prozess verstanden haben, werden Konflikte zur Routine – Git fragt Sie einfach nach einer Entscheidung, die Sie treffen können.
🔗 Share this article
✍️ Leave a Comment