git range-diff für überarbeitete Branches

git range-diff für überarbeitete Branches

- Matt

Nach einem git rebase -i mit Squash, Reorder und ein paar Fixups wollte ich wissen, was sich an den einzelnen Commits inhaltlich geändert hat - nicht nur, dass sich die Hashes geändert haben. Ein einfacher git diff zwischen altem und neuem Branch hilft wenig, weil er alles als einen großen Klumpen zeigt statt Commit für Commit.

git range-diff vergleicht zwei Versionen einer Commit-Reihe und paart zusammengehörige Commits automatisch:

git range-diff main..feature@{1} main..feature

feature@{1} ist der Stand vor dem letzten Rebase, aus dem Reflog. Die Ausgabe zeigt pro Commit-Paar ein Diff des Diffs - was wirklich geändert wurde, mit +/- in einer zweiten Spalte für Zeilen, die nur wegen verschobener Commits anders aussehen.

Der Haken: bei kompletten Rewrites eines Commits erkennt es die Zuordnung manchmal falsch und zeigt Löschung plus Neuanlage statt eines Diffs. Dagegen hilft --creation-factor=<prozent>, um die Schwelle zu verschieben. Die Ausgabe ist außerdem nicht stabil zwischen Git-Versionen - für Skripte ungeeignet.

Quelle: git-range-diff(1)