Da Anonimo (non verificato) , 29 Aprile 2026

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

OpzioneDescrizione
--cached / --stagedConfronta l'index con HEAD invece della working tree con l'index.
--statMostra un riepilogo di inserimenti/cancellazioni per file.
--name-onlyElenca solo i nomi dei file che differiscono.
--word-diffEvidenzia le modifiche a livello di parola.
-w, --ignore-all-spaceIgnora differenze di spazi.
--color-movedEvidenzia 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