Ce face git range-diff
După un git rebase sau după ce corectezi commit-urile cerute la code review, toate hash-urile se schimbă. git range-diff pune față în față seria veche și seria nouă, potrivește commit-urile între ele și îți arată, pentru fiecare pereche, dacă sunt identice sau ce diferă.
În ieșire, = înseamnă că modificarea din commit este aceeași, ! că s-a schimbat (urmează un „diff al diff-urilor”), < că commit-ul există doar în seria veche, iar > doar în cea nouă. Pentru a vedea seria veche după rebase, folosește o ramură salvată înainte sau git reflog (de exemplu feature@{1}).
Opțiuni și argumente
| Opțiune / Parametru | Descriere |
|---|---|
A..B C..D |
Compară seria de commit-uri A..B (veche) cu C..D (nouă). |
X...Y |
Forma scurtă: compară commit-urile de la baza comună până la X cu cele până la Y. |
--creation-factor=N |
Cât de diferite pot fi două commit-uri ca să fie considerate pereche (implicit 60); mărește-l dacă perechile nu sunt găsite. |
--no-dual-color |
Colorează doar diff-ul diff-urilor, nu și liniile originale. |
-s, --no-patch |
Arată doar tabelul de perechi, fără diferențe. |
Exemple
Exemplul 1: Ce s-a schimbat după rebase și corectare
Ramura feature/cos a fost mutată peste main, iar al doilea commit a fost corectat (TVA 21% în loc de 19%). Primul commit e identic (=), al doilea s-a schimbat (!). Datele sunt fixate, ca hash-urile să fie stabile.
export GIT_AUTHOR_DATE="2026-10-20T10:00:00+03:00" GIT_COMMITTER_DATE="2026-10-20T10:00:00+03:00"
git init -q -b main magazin
cd magazin
git config user.name "Ana Popescu" && git config user.email "ana@exemplu.ro"
echo 'Produse' > produse.txt && git add . && git commit -q -m "Start"
git switch -q -c feature/cos
printf 'def adauga(cos, produs):\n cos.append(produs)\n' > cos.py
git add . && git commit -q -m "Cos de cumparaturi"
printf 'def total(cos):\n suma = sum(p.pret for p in cos)\n return suma * 1.19\n' > total.py
git add . && git commit -q -m "Calcul total"
git branch cos-v1
git switch -q main
echo 'Telefon 1200 lei' >> produse.txt && git commit -q -am "Produs nou pe main"
git switch -q feature/cos
git rebase -q main
sed -i.bak 's/1.19/1.21/' total.py && rm total.py.bak
git commit -q --amend -a --no-edit
git range-diff --creation-factor=95 main~1..cos-v1 main..feature/cos
Rezultat
1: 7dd995b = 1: 3a913ca Cos de cumparaturi
2: cbb7fcc ! 2: a46e7f5 Calcul total
@@ total.py (new)
@@
+def total(cos):
+ suma = sum(p.pret for p in cos)
-+ return suma * 1.19
++ return suma * 1.21
Exemplul 2: Comparație rapidă după un push forțat
Un coleg a rescris ramura de pe server. Comparăm vechea poziție (din reflog) cu cea nouă, doar ca tabel de perechi.
git fetch origin
git range-diff -s origin/feature/cos@{1}...origin/feature/cos
Ieșire în terminal
1: 7dd995b = 1: 3a913ca Cos de cumparaturi
2: cbb7fcc ! 2: a46e7f5 Calcul total
-: ------- > 3: 5c0e2d1 Livrare gratuita peste 200 lei
Greșeli frecvente
- Compararea cu
git diff vechi nou: arată diferența dintre stările finale ale codului și include și modificările venite dinmainprin rebase, nu ce s-a schimbat în fiecare commit al seriei. - Pierderea seriei vechi: salvează o ramură înainte de rebase (
git branch cos-v1) sau folosește reflog-ul (feature/cos@{1}) cât timp intrarea există.
Comenzi înrudite
git rebase: Reaplică commit-urile din ramura curentă peste o altă ramură, creând un istoric perfect liniar.git reflog: Jurnalul de siguranță al depozitului: înregistrează fiecare mutare a indicatorului HEAD și permite recuperarea commit-urilor pierdute.git diff: Afișează diferențele de cod (linie cu linie) între directorul de lucru, staging sau două versiuni diferite.