Code vergleichen und Merge-Konflikte lösen — Diff-Guide für Entwickler
Für Entwickler ist das Lesen und Verstehen von Code-Diffs eine tägliche Aufgabe — beim Code-Review, beim Merge von Branches und bei der Analyse von Änderungshistorien. Merge-Konflikte zu lösen ist dabei oft die kniffligste Aufgabe. Dieser Artikel erklärt, wie Diffs funktionieren, wie man Merge-Konflikte effizient löst und wann der WikiPlus Textvergleich als ergänzendes Tool nützlich ist.
Wie Git-Diffs aufgebaut sind: Das Format verstehen
Ein Git-Diff hat ein standardisiertes Format, das auf den ersten Blick verwirrend wirkt. Hier ist es aufgeschlüsselt. Datei-Header: diff --git a/datei.js b/datei.js zeigt, welche Datei verglichen wird. index 1234567..abcdefg 100644 zeigt die Git-Objekt-IDs. --- a/datei.js und +++ b/datei.js markieren die alte und neue Version. Hunk-Header: @@ -10,7 +10,8 @@ zeigt, wo im File die Änderungen sind. -10,7 bedeutet: In der alten Version beginnt der Ausschnitt in Zeile 10 und umfasst 7 Zeilen. +10,8 bedeutet: In der neuen Version beginnt er in Zeile 10 und umfasst 8 Zeilen. Inhalt: - am Anfang = gelöschte Zeile. + am Anfang = hinzugefügte Zeile. Kein Prefix = unveränderte Kontext-Zeile. Mit diesem Grundverständnis kann man jeden Git-Diff lesen und verstehen.
Merge-Konflikte: Entstehung und Lösung
Merge-Konflikte entstehen, wenn zwei Branches dieselbe Zeile in einer Datei unterschiedlich geändert haben und Git nicht automatisch entscheiden kann, welche Version die richtige ist. Konflikt-Marker im Code: <<<<<<< HEAD (aktuelle Branch-Version). Text der aktuellen Branch. ======= (Trennzeichen). Text der zu mergenden Branch. >>>>>>> feature-branch. Schritte zur Konfliktlösung: Datei mit Konflikt-Markern öffnen. Beide Versionen vergleichen und die korrekte entscheiden. Konflikt-Marker manuell entfernen und den finalen Code behalten. Datei speichern und git add aufrufen. Merge abschließen mit git commit. Werkzeuge: VS Code has built-in merge conflict resolution with 'Accept Current Change', 'Accept Incoming Change' und 'Accept Both Changes' Buttons. GitKraken und IntelliJ bieten visuelle Three-Way-Merge-Tools. Für komplexe Konflikte: Kurz beide Versionen in den WikiPlus Textvergleich kopieren, um die Unterschiede klar zu sehen, bevor man manuell entscheidet.
Code-Review mit Diffs: Best Practices
Code-Reviews anhand von Diffs sind in professionellen Teams Standard. Ein gutes Code-Review geht über das reine Lesen des Diffs hinaus. Schritte für ein effektives Code-Review: Gesamten Diff einmal überblicken: Was wurde geändert? Neue Dateien, gelöschte Dateien, modifizierte Dateien? Auf kritische Bereiche fokussieren: Sicherheitskritischer Code, API-Änderungen, Datenbankschema-Änderungen. Logik prüfen: Nicht nur 'ist der Code syntaktisch korrekt', sondern 'tut er das, was er soll?'. Tests prüfen: Gibt es Tests für die neuen Funktionen? Werden Randfälle abgedeckt? Regressionspotenzial einschätzen: Könnte die Änderung bestehende Funktionalität brechen? Review-Kommentare präzise formulieren: Statt 'Das gefällt mir nicht' lieber 'Diese Funktion hat O(n²) Komplexität — kannst du sie auf O(n) optimieren?' PR-Größe: Code-Reviews werden besser und schneller, wenn PRs klein sind (unter 400 Zeilen Diff). Große PRs fragmentieren in kleinere Feature-Branches.
Visual Diff Tools: GitHub, GitLab und VS Code im Vergleich
Es gibt verschiedene Tools für visuelle Diff-Darstellungen. GitHub Pull Request Diff: Inline-Diff (veränderte Zeilen in derselben Ansicht) und Split-Diff (alte Version links, neue rechts). Kommentare können direkt auf Zeilen gesetzt werden. Gut für asynchrone Code-Reviews in Teams. GitLab Merge Request Diff: Ähnlich wie GitHub, mit erweitertem CI/CD-Integration. Zeigt Testergebnisse und Pipeline-Status direkt im Merge Request. VS Code Git Integration: Eingebaute Diff-Ansicht für einzelne Dateien. Ctrl+Shift+G öffnet Source Control Panel. Klick auf eine geänderte Datei zeigt Split-Diff. Für komplexe Konflikte: Dreispaltige Merge-Ansicht mit 'Current', 'Incoming' und 'Result'. Beyond Compare (Windows/Mac/Linux): Professionelles Diff-Tool für Dateien und Ordner. Besonders gut für binäre Dateien und Ordnervergleiche. Kostenpflichtig, aber sehr leistungsfähig. Der WikiPlus Textvergleich: Die schnellste Option für Nicht-Entwickler und für den schnellen Vergleich ohne IDE oder Git-Repository.
Häufig gestellte Fragen
- Wie löse ich einen Merge-Konflikt bei gelöschten Dateien?
- Wenn eine Datei in einem Branch gelöscht und im anderen geändert wurde, fragt Git, ob die Löschung beibehalten oder die Änderungen übernommen werden sollen. Mit git status sieht man den Status, mit git checkout -- datei.txt die Datei wiederherstellen oder mit git rm datei.txt die Löschung bestätigen.
- Kann ich einen Diff zwischen zwei beliebigen Git-Commits erstellen?
- Ja: git diff abc1234 def5678 vergleicht zwei spezifische Commits. git diff HEAD~5..HEAD vergleicht die letzten 5 Commits. git log --oneline zeigt alle Commits mit ihren Short-Hashes. Für einen visuellen Vergleich kann man die Ausgabe auch in den WikiPlus Textvergleich kopieren.
- Was ist ein Three-Way-Merge und wann brauche ich ihn?
- Ein Three-Way-Merge vergleicht drei Versionen: den gemeinsamen Vorfahren-Commit, den aktuellen Stand der Branch und den einzumergenden Stand. Das erlaubt Git, viele Konflikte automatisch zu lösen, die mit einem einfachen Two-Way-Merge nicht lösbar wären. Git verwendet Three-Way-Merge standardmäßig für git merge.