Le problème que résout range-diff
Supposez qu'un contributeur publie v1 d'une série de patches, puis v2 après feedback. Comme relecteur, vous voulez voir ce qui a changé entre les versions, pas le diff cumulatif.
L'invocation basique
git range-diff main..v1 main..v2
Lire la sortie
1: abc1234 = 1: def5678 Add login form
2: 234abcd ! 2: 9876fed Validate email format
@@ src/login.js
- if (!email.includes("@")) {
+ if (!EMAIL_REGEX.test(email)) {
3: <new> > 3: 111aaaa Add unit tests for validator
=commits identiques.!commits avec même intention mais contenu différent.>commits seulement à droite.<commits seulement à gauche.
Logique d'appariement
Range-diff utilise les métadonnées du commit pour apparier les commits entre les plages.
Relire des PRs force-pushed
git fetch origin pr/123:pr-123-old
git fetch origin pr/123
git range-diff main..pr-123-old main..origin/pr/123
Range-diff pendant le rebase
git rebase -i HEAD~5
git range-diff ORIG_HEAD HEAD
Range-diff pour releases
git range-diff origin/release-1.4 origin/release-1.5
Régler la comparaison
git range-diff --creation-factor=80 base..v1 base..v2
git range-diff --no-patch base..v1 base..v2
Intégration avec format-patch
git format-patch --range-diff=v1 --cover-letter -3