- 1 Section
- 10 Lessons
- unbegrenzt
- Versionsverwaltung mit Git10
Konflikte lösen
Früher oder später passiert es jedem: Merge-Konflikt. Zwei Branches haben dieselbe Stelle einer Datei geändert, Git kann nicht entscheiden welche Variante gewinnt – du musst es ihm sagen. Anfänger empfinden Konflikte oft als beängstigend. In dieser Lektion lernst du, sie souverän zu lösen.
Wichtig: Konflikte sind nicht Bugs. Sie sind ein Sicherheitsmechanismus – Git fragt nach, statt blind eine Variante zu wählen. Wer das System versteht, fürchtet sich nicht mehr.
1) Wann entsteht ein Konflikt?
Ein Konflikt tritt auf, wenn Git nicht automatisch entscheiden kann, wie zwei Änderungen kombiniert werden. Typische Auslöser:
- Du und ein Kollege ändert dieselbe Zeile einer Datei verschieden.
- Du löschst eine Datei, ein Kollege ändert sie.
- Beim
git pullstehen lokale Änderungen quer zu Remote-Änderungen. - Beim
git mergeodergit rebasekollidieren Branches.
Was Git automatisch löst: Änderungen in verschiedenen Dateien, Änderungen in verschiedenen Zeilen derselben Datei. Nur direkte Überschneidungen brauchen menschliche Entscheidung.
2) Wie sieht ein Konflikt aus?
Wenn ein Konflikt auftritt, fügt Git spezielle Markierungen in die betroffene Datei ein. So sieht das aus:
<<<<<<< HEAD beginnt deine Version (was im aktuellen Branch ist), ======= trennt die Versionen, >>>>>>> feature/dokumentation beendet die andere Version. Deine Aufgabe: entscheide, welche Version gilt – oder kombiniere beide. Dann lösche die Marker.3) Auflösung Schritt für Schritt
git merge/git rebase/git pull zeigt Git „CONFLICT (content)". git status zeigt, welche Dateien betroffen sind.<<<, ===, >>> finden.<<<, ===, >>> raus. Datei muss am Ende sauber sein, ohne Spuren des Konflikts.git add <datei> – signalisiert Git: „Konflikt gelöst".git commit (bei Merge) oder git rebase --continue (bei Rebase). Git öffnet vorgefertigte Commit-Nachricht.4) Vorher vs. Nachher
Hier dasselbe Beispiel: Konflikt-Zustand und nach der Lösung. Klick zwischen den Tabs:
5) Befehle für Konflikte
# Status anzeigen – zeigt konfliktbehaftete Dateien git status # Konfliktbehaftete Dateien filtern git diff --name-only --diff-filter=U # Detail-Diff eines Konflikts git diff <datei> # Konflikt als "gelöst" markieren git add <datei> # Bei Merge: nach Lösung git commit # öffnet Default-Commit-Message # Bei Rebase: nach Lösung git rebase --continue # Notfall: alles abbrechen git merge --abort # Merge rückgängig git rebase --abort # Rebase rückgängig # Variante einer Seite komplett übernehmen git checkout --ours <datei> # eigene Version git checkout --theirs <datei> # andere Version
--abort sind Goldwert: wenn du beim Konflikt-Lösen die Übersicht verlierst, kannst du jederzeit zurück zum Stand vor dem Merge/Rebase. Nichts ist verloren. --ours und --theirs sind beim Mergen Abkürzungen, wenn klar ist, welche Seite gewinnen soll.6) Tool-Unterstützung
Manuelle Konflikt-Lösung ist mühsam. Heute nutzen die meisten Entwickler:innen grafische Tools:
- VS Code: zeigt Konflikte mit Inline-Buttons „Accept Current", „Accept Incoming", „Accept Both", „Compare Changes". Sehr komfortabel.
- IntelliJ / PyCharm: hat einen 3-Wege-Merge-Editor – links deine Version, rechts die andere, Mitte das Ergebnis.
- Meld / kdiff3 / Beyond Compare: externe Merge-Tools, in
git mergetooleinbindbar. - GitLens (VS Code): zusätzliche Konflikt-Insights, Git-Blame inline.
Setup: git config --global merge.tool vscode + git mergetool startet das konfigurierte Tool. In der Praxis öffnen die meisten ihre IDE direkt – auch das funktioniert problemlos.
7) Konflikte vermeiden – Best Practices
git pull origin main oder git rebase main – Konflikte früh erkennen.8) Anti-Muster bei Konflikten
<<<-Markern committen → Syntax-Fehler, Build kaputt.--abort ständig wegrollen statt lösen → Branches divergieren immer mehr.9) Rebase-Konflikte sind anders
Bei Rebase entstehen Konflikte pro Commit, nicht einmal für das Ganze. Wenn du 5 Commits rebasest, kann jeder einzeln einen Konflikt produzieren. Workflow:
- Konflikt im ersten Commit lösen →
git add→git rebase --continue - Konflikt im zweiten Commit lösen →
git add→git rebase --continue - ... usw. bis fertig.
Bei vielen Konflikten kann das ermüdend sein. Tipp: lieber abbrechen (git rebase --abort) und stattdessen mergen. Oder: git rerere aktivieren – Git merkt sich gelöste Konflikte und wendet sie automatisch an, wenn sie wieder auftauchen.
10) Klausur-Fakten
- Konflikt-Marker:
<<<<<<<,=======,>>>>>>> - HEAD = aktuelle Branch-Version, nach dem === = andere Branch-Version.
- Nach Lösung:
git add <datei>markiert als gelöst. - Abschließen:
git commit(Merge) odergit rebase --continue(Rebase). - Notfall:
git merge --abortodergit rebase --abort. - Wann Konflikte entstehen: dieselben Zeilen, gleichzeitig geändert.
Zusammenfassung
Konflikte entstehen, wenn zwei Branches dieselbe Stelle anders ändern. Git markiert mit <<<<<<< HEAD, =======, >>>>>>> <branch>. Auflösung: entscheiden welche Variante (oder kombinieren) → Marker entfernen → git add → git commit (bei Merge) oder git rebase --continue (bei Rebase). Notfall: git merge --abort bzw. git rebase --abort. IDE-Tools (VS Code, IntelliJ) helfen massiv. Prävention: kleine Branches, oft syncen, klare Verantwortlichkeiten. Nächste Lektion: Git-Workflows.
