Skip to content

Strategien zur Lösung von Git-Konflikten

Einführung

Konflikte sind unvermeidlich in kollaborativer Entwicklung. Dieser Leitfaden geht über Grundlagen hinaus: Muster, Entscheidungslogik und Tooling für schnelle, sichere Auflösung.

Konflikttypen

TypBeispielUrsache
ContentGleiche Zeilen geändertParallele Edits
Add/DeleteDatei in einem gelöscht, im anderen geändertDivergierende Refactors
Rename/EditUmbenannt + editiertAsynchrone Großänderung
BinaryBild beidseitig geändertNicht zeilenweise verschmelzbar
Directory/FileVerzeichnis ↔ DateiStruktur-Umbau

Allgemeiner Ablauf

Erkennen → Klassifizieren → Intention klären → Zusammenführen / wählen → Testen → Commit

Schnelle Inspektion

bash
git status
git diff --name-only --diff-filter=U
git diff --merge

Ours vs Theirs

bash
# Unsere Version behalten
git checkout --ours path/file.txt
# Deren Version behalten
git checkout --theirs path/file.txt
git add path/file.txt

Sparsam nutzen – fachliche Korrektheit prüfen.

Strukturierte manuelle Zusammenführung

  1. Beide Seiten vollständig lesen
  2. Intention identifizieren (Fachlogik, Format, Hotfix?)
  3. Zielverhalten rekonstruieren
  4. Marker entfernen & Tests ausführen
  5. git add → Commit-Fortsetzung

Vorbeugung durch kleinere Commits

bash
git add -p

Granulare, kohärente Commits reduzieren Konfliktfläche.

Strategisches Rebase für Langläufer

bash
git fetch origin
git rebase origin/main

Tools

ToolKommandoHinweis
VS CodeMerge-EditorKlarer Vergleich
Meldgit mergetoolVisuelle Diff/Merge
Beyond Comparegit mergetoolKommerziell
IntelliJGruppiert KonflikteIDE-integriert

Konfliktmarker-Beispiel

<<<<<<< HEAD (current: main)
applyDiscount(cart, 0.10)
=======
applyDiscount(cart, discountRate())
>>>>>>> feature/dynamic-discount

Entscheidung: Dynamik mit Fallback:

js
applyDiscount(cart, discountRate() ?? 0.10)

Binärkonflikte

bash
git checkout --theirs assets/logo.png
git add assets/logo.png

Oder Asset regenerieren.

Abbrechen / Fortsetzen

bash
git merge --abort
git rebase --abort
git rebase --continue

Rerere (Reuse Recorded Resolution)

bash
git config --global rerere.enabled true

Merkt sich Lösungen und wendet sie wieder an.

Präventive Maßnahmen

TechnikNutzen
Einheitliches FormattingStil-Diffs weg
Kleine PRsWeniger Überlappung
Frühe Branch-SynchronisationGeringere Divergenz
Architektur-AbstimmungDoppelarbeit verhindern
Feature FlagsFrühes Mergen unfertiger Arbeit

Sicherheitsnetz

bash
./run-tests.sh
git diff --check

Schlechte Auflösung zurücknehmen

bash
git reflog
git reset --hard <hash>

Zusammenfassung

Konflikte signalisieren parallele Innovation. Mit Systematik, Hygiene und Tools schrumpfen sie zu kleinen Unterbrechungen.

Nächste Schritte

  • Undo-Strategien (git-reset-revert-and-checkout-explained.md)
  • Temporäre Änderungen (git-stash-and-temporary-changes.md)

Key Commands

bash
git diff --name-only --diff-filter=U
git checkout --ours <file>
git checkout --theirs <file>
git merge --abort
git rebase --continue