Übersicht
git range-diff <range1> <range2>
git range-diff <base> <rev1> <rev2>
Beschreibung
Der git range-diff-Befehl vergleicht zwei Sequenzen von Commits (typischerweise einen Branch vor und nach einem Rebase) und zeigt, was sich zwischen ihnen auf Patch-Ebene geändert hat. Das ist weit nützlicher als ein normales git diff zum Reviewen von Rebases, weil entsprechende Commits gepaart und nur die substantiellen Unterschiede hervorgehoben werden.
Paaren Sie das mit --reroll-count bei format-patch für Upstream-Patch-Serien, oder verwenden Sie es einfach lokal, um zu verifizieren, dass ein Force-Push nur Aufräumarbeiten eingebracht hat. Die Ausgabe verwendet ein eigenes Format mit = für unveränderte Commits, ! für geänderte und < sowie > für fehlende oder hinzugefügte.
Im täglichen Einsatz integriert sich git range-diff eng mit Shell-Aliasen, Editor-Plugins und Continuous Integration. Power-User fügen oft Aliase hinzu, die Flags kombinieren, die sie immer übergeben, oder wickeln den Befehl in Skripte, die Teamkonventionen durchsetzen. Die Ausgabeformatierung kann über Git-Config angepasst werden — Pretty-Formate, Farbschemata und Pager-Verhalten sind alle einstellbar. Wenn etwas schiefgeht, ist der erste Diagnoseschritt üblicherweise, den Befehl erneut mit GIT_TRACE=1 in der Umgebung auszuführen, was die zugrunde liegenden Plumbing-Aufrufe offenlegt. Für ungewöhnliche Situationen öffnet die --help-Ausgabe (git range-diff --help) die vollständige Manpage mit Details zu jeder Option, einschließlich solcher, die in alltäglichen Workflows selten verwendet werden, aber für Debugging oder Skripting im großen Maßstab essentiell sind.
Zu verstehen, wie git range-diff mit dem Rest von Gits Datenmodell interagiert — der Objektdatenbank, dem Index, Refs und dem Working Tree — zahlt sich aus. Jeder Befehl operiert auf einer Teilmenge dieser Stücke, und zu wissen, welche er berührt, hilft Ergebnisse vorherzusagen und sich von Fehlern zu erholen. Das Lesen der offiziellen Git-Dokumentation neben praktischer Übung in einem Wegwerf-Repository ist der schnellste Weg, die Nuancen zu verinnerlichen. Die meisten Produktionsprobleme mit Git rühren von einer von drei Ursachen: überraschendem Standardverhalten, partiellen Netzwerkoperationen oder dem Umschreiben bereits geteilter Historie. Ein funktionierendes mentales Modell der Nebenwirkungen von git range-diff hilft, alle drei zu vermeiden.
Häufige Optionen
| Option | Beschreibung |
|---|---|
--no-color | Deaktiviert farbige Ausgabe. |
--creation-factor=<n> | Stellgröße zum Matchen von Commits über Bereiche. |
--dual-color | Färbt sowohl innere als auch äußere Diffs. |
--no-patch | Zeigt nur die Match-Zusammenfassung, keine Patches. |
--notes | Bezieht Git-Notes in den Vergleich ein. |
Beispiele
git range-diff main..feature@{1} main..feature
# Branch vor und nach einem Rebase vergleichen
git range-diff origin/main feature.v1 feature.v2
# Zwei Versionen einer Patch-Serie vergleichen
git range-diff @{u}..HEAD HEAD@{1}..HEAD
# Aktuelle Upstream-relative Spitze mit der vorherigen vergleichen
Häufige Fehler
Range-Diff matcht Commits über eine Heuristik; wenn Sie viele kleine Umordnungen vornehmen, kann die Ausgabe unerwartete Commits paaren. Stellen Sie bei Bedarf --creation-factor ein. Verwechseln Sie Range-Diff nicht mit git diff A..B — sie beantworten verschiedene Fragen.
Verwandte Befehle
git diff, git log, git rebase, git format-patch