Sinossi
git diff [<options>] [<commit>] [--] [<path>...]
Descrizione
Il comando git diff mostra differenze tra due insiemi di contenuto file. Senza argomenti, confronta la working tree con la staging area, mostrando ciò che non è in stage. Con --cached (o --staged), confronta la staging area con l'ultimo commit. Con uno o due argomenti commit, confronta quei commit.
I diff sono centrali per la code review, il debug e capire la storia. Git produce diff unificati per default ma può anche produrre diff a livello di parola, evidenziazione color-moved e statistiche. Per i file binari, viene mostrata solo una riga "differ" a meno che non sia configurato un driver di diff binario.
Nell'uso quotidiano, git diff si integra con alias, editor e CI. Per il debug, usa GIT_TRACE=1. git diff --help apre la man page completa.
Capire come git diff interagisce con il modello dati di Git paga dividendi. La maggior parte dei problemi deriva da: comportamento predefinito sorprendente, operazioni di rete parziali o riscrittura di storia condivisa.
Opzioni comuni
| Opzione | Descrizione |
|---|---|
--cached / --staged | Confronta l'index con HEAD invece della working tree con l'index. |
--stat | Mostra un riepilogo di inserimenti/cancellazioni per file. |
--name-only | Elenca solo i nomi dei file che differiscono. |
--word-diff | Evidenzia le modifiche a livello di parola. |
-w, --ignore-all-space | Ignora differenze di spazi. |
--color-moved | Evidenzia blocchi di codice spostati. |
-U<n> | Mostra n righe di contesto (default 3). |
Esempi
git diff
# Modifiche non in stage nella working tree
git diff --cached
# Modifiche in stage per il prossimo commit
git diff main..feature
# Tutte le differenze tra due branch
git diff HEAD~3 HEAD -- src/
# Ultimi tre commit, ristretti a src/
Errori comuni
Dimenticare --cached quando si rivede ciò che sta per essere committato è una confusione classica. Un'altra è usare la sintassi range due-punti vs tre-punti in modo errato: A..B è "differenze da A a B", mentre A...B è "differenze dalla merge base a B". Diff massivi con solo whitespace dopo modifiche dell'editor possono essere domati con -w.
Comandi correlati
git status, git log -p, git show, git range-diff