Zum Hauptinhalt springen

← Zurück zum Blog

Zwei Texte vergleichen und genau sehen, was sich geändert hat

Du hast zwei Versionen derselben Sache — ein Dokument vor und nach der Bearbeitung, zwei Konfigurationsdateien, die Überarbeitung deines Absatzes durch einen Kollegen — und musst genau wissen, was sich geändert hat. Beides nebeneinander zu lesen ist langsam und fehleranfällig. Ein Diff erledigt das sofort.

Wie eine Änderung an einem Wort wirklich aussieht. Wir haben unserem Text-Diff-Werkzeug zwei Versionen derselben zwei Zeilen gegeben, die sich nur im letzten Wort unterscheiden — dog gegen cat. Die Ausgabe behält the quick brown fox als unmarkierte gemeinsame Zeile und zeigt die geänderte Zeile zweimal: einmal mit − (entfernt), einmal mit + (hinzugefügt). Das ist das Wesentliche an Diffs: Sie melden nicht „ein Wort hat sich geändert”. Die Einheit ist die Zeile, eine Änderung an einem Zeichen erscheint also als komplette Zeile gelöscht plus komplette Zeile eingefügt. Deshalb macht das Neuformatieren einer Datei jeden Diff wertlos, selbst wenn inhaltlich nichts passiert ist.

Das ist die echte Ausgabe, nicht ihre Beschreibung. Zwei Versionen derselben zwei Zeilen, die sich nur im letzten Wort unterscheiden, durch unser Text-Diff-Werkzeug:

the quick brown fox
−
jumps over the lazy dog
+
jumps over the lazy cat

Die gemeinsame Zeile bleibt unmarkiert; die geänderte erscheint zweimal, einmal −, einmal +. Das ist das Wesentliche an Diffs: Die Einheit ist die Zeile, eine Änderung an einem Zeichen löscht also eine ganze Zeile und fügt eine ganze ein. Deshalb zerstört Neuformatieren einen Diff auch dann, wenn inhaltlich nichts passiert ist.

Was ein Diff wirklich tut

Ein Diff-Algorithmus findet die kleinste Menge an Hinzufügungen und Löschungen, die einen Text in den anderen verwandelt, und zeigt sie farbig: Grün für hinzugefügt, Rot für entfernt, normal für unverändert. Das ist dieselbe Technik hinter „Änderungen nachverfolgen” und jedem Code-Review.

Zeilen-Diff vs. Wort-Diff

Es gibt zwei nützliche Granularitäten:

  • Zeilen-Diff vergleicht ganze Zeilen. Perfekt für Code, Konfigurationsdateien, CSV und Listen, wo eine „Änderung” meist eine ganze hinzugefügte, entfernte oder ersetzte Zeile bedeutet.
  • Wort-Diff vergleicht Wort für Wort. Perfekt für Fließtext, wo du sehen willst, dass sich in einem Satz nur ein Wort geändert hat, statt dass die ganze Zeile rot-grün aufleuchtet.

Beginne mit dem Zeilen-Diff; wechsle zum Wort-Diff, wenn eine Zeile als geändert erscheint, du aber den Unterschied nicht erkennst.

Die Frage nach der Granularität hat in unserer eigenen Ausgabe eine messbare Antwort. Zwei Versionen, die sich in einem Wort unterscheiden, ergaben drei Zeilen, nicht eine: die gemeinsame Zeile unmarkiert, dann die geänderte zweimal — einmal −, einmal +. Ein Zeilen-Diff kann nicht sagen „ein Wort hat sich geändert”, weil die Zeile seine Einheit ist. Deshalb zerstört das Neuformatieren einer Datei jeden Diff, auch bei identischer Bedeutung.

Das Ergebnis lesen

  • Eine rote Zeile gefolgt von einer grünen = diese Zeile wurde bearbeitet (entfernt und in neuer Form wieder hinzugefügt).
  • Eine einzelne grüne Zeile = hinzugefügt.
  • Eine einzelne rote Zeile = gelöscht.
  • Die Zusammenfassung (z. B. +3 −1) zeigt dir das Ausmaß der Änderung auf einen Blick.

Das Lesen ist dann mechanisch: Unmarkiertes überlebte, − ging, + kam. Unser Durchlauf ergab genau the quick brown fox / − / jumps over the lazy dog / + / jumps over the lazy cat — und beachte, dass entfernte und hinzugefügte Zeile benachbart stehen. Das ist der visuelle Hinweis, dass eine Zeile geändert wurde, nicht wirklich gelöscht oder eingefügt.

Hier die tatsächliche Ausgabe unseres Text-Diffs für eine Änderung von einem Wort — zwei Versionen derselben zwei Zeilen, die sich nur im letzten Wort unterscheiden:

the quick brown fox
−
jumps over the lazy dog
+
jumps over the lazy cat

Zurück kamen drei Zeilen, nicht eine. Die gemeinsame Zeile ist unmarkiert, die geänderte erscheint zweimal: einmal unter −, einmal unter +. Ein Zeilen-Diff kann nicht melden „ein Wort hat sich geändert”, weil die Zeile seine Vergleichseinheit ist.

Warum im Browser vergleichen

Diffs betreffen oft sensibles Material — Verträge, Zugangsdaten in einer Konfigurationsdatei, unveröffentlichte Texte. Ein Online-Tool, das deinen Text hochlädt, ist ein unnötiges Risiko. Das Text-Diff-Tool vergleicht komplett im Browser: Keine der Versionen verlässt dein Gerät.

Eine dritte Granularität: Zeichen-Diff

Bei sehr kurzen, dichten Zeichenketten ist selbst der Wort-Diff zu grob. Ein Zeichen-Diff vergleicht Buchstabe für Buchstabe — genau das brauchst du, wenn ein einziges Zeichen alles entscheidet: eine vertauschte Ziffer in einer Bestellnummer, ein falsches Zeichen in einem Hash oder API-Schlüssel, ein Tippfehler mitten in einem langen Token. Wo der Wort-Diff das ganze Token als geändert markiert, zeigt der Zeichen-Diff direkt auf das eine abweichende Zeichen.

Faustregel: Zeilen-Diff für Dateien und Listen, Wort-Diff für Fließtext, Zeichen-Diff für Codes und Bezeichner.

Diese Einheit erklärt auch, warum Neuformatieren einen Diff zerstört. Wir gaben dem Tool dieselben drei Wörter zweimal, einmal in einer Zeile und einmal in drei, ohne am Inhalt etwas zu ändern:

−
one two three
+
one
+
two
+
three

Jede Zeile ist markiert. Nichts wurde bearbeitet — nur neu umbrochen. Ein Wort- oder Zeichen-Diff würde hier gar keine Änderung melden. Die Granularitätsfrage entscheidet damit eine Messung statt eines Arguments.

Wann du zum Diff greifst

  • Eine Bearbeitung prüfen — sehen, was ein Kollege, ein Lektor oder eine KI-Überarbeitung in deinem Entwurf wirklich geändert hat.
  • Versionen vergleichen — ein Vertrag, ein Satz Bedingungen oder eine Konfigurationsdatei vor und nach einer Änderung.
  • Eine Kopie verifizieren — bestätigen, dass zwei Exporte, zwei Übersetzungen oder zwei Listen wirklich Zeichen für Zeichen übereinstimmen.
  • Ein Fast-Duplikat aufspüren — zwei Blöcke, die identisch aussehen, aber Verschiedenes ergeben.

Häufige Missverständnisse

  • Ein Diff verfolgt keine „verschobenen” Textblöcke. Schneidest du einen Absatz aus und fügst ihn weiter unten ein, zeigen die meisten Tools eine Löschung plus eine Hinzufügung, keine Verschiebung.
  • Eine ganz markierte Zeile heißt nicht, dass sich alles geändert hat. Im Zeilenmodus markiert schon ein geändertes Wort die ganze Zeile — wechsle zu Wort- oder Zeichen-Diff, um die echte Änderung zu sehen.
  • Unsichtbare Zeichen zählen mit. Zwei gleich aussehende Zeilen können sich durch ein nachgestelltes Leerzeichen, einen Tab oder ein Zeilenende unterscheiden; das ist ein echter Unterschied, kein Fehler — genau das verhindert das Aufräumen im Leitfaden zum Entfernen von Zeilenumbrüchen und doppelten Zeilen.

Die Marker machen noch eine Unterscheidung sichtbar. Eine Einfügung liefert

alpha
+
beta
 
gamma

eine Löschung liefert

alpha
−
beta
 
gamma

Eine echte Einfügung oder Löschung hat genau eine markierte Zeile; eine Änderung erzeugt ein benachbartes −/+-Paar. Diese Nachbarschaft lernt man zuerst zu lesen, und sie erklärt, warum verschobener Code im Review so laut aussieht — eine Verschiebung ist eine Löschung und eine Einfügung, weit auseinander, ohne etwas, das sie paart.

Tipp: erst normalisieren für ein sauberes Diff

Unterscheiden sich zwei Dateien nur in nachgestellten Leerzeichen, Tabs oder Zeilenenden, wird das Diff unübersichtlich. Lass beide zuerst durch den Text-Reiniger laufen — Zeilen trimmen und Abstände vereinheitlichen — dann treten die echten Unterschiede hervor.