Skip to content

Modulo 08 — Diffs (confronti)

git diff mostra le differenze tra: commit, branch, file, working directory e altro. Si usa spesso insieme a git status e git log per farsi un quadro completo del repository.

Terminal window
git diff # working directory vs staging area
# (le modifiche NON ancora in staging)
git diff HEAD # working directory vs ultimo commit
# (tutte le modifiche dall'ultimo commit)
git diff --staged # staging area vs ultimo commit
git diff --cached # sinonimo di --staged
git diff HEAD <file> # limitato a un file
git diff --staged <file> # limitato a un file
git diff branch1..branch2 # tra i tip di due branch
git diff <hash1>..<hash2> # tra due commit

git diff --staged risponde a: “cosa finirebbe nel commit se eseguissi git commit adesso?”

diff --git a/rainbow.txt b/rainbow.txt
index 72d1d5a..f2c8117 100644
--- a/rainbow.txt
+++ b/rainbow.txt
@@ -3,4 +3,5 @@ orange
yellow
green
blue
-purple
+indigo
+violet

git diff dichiara i file confrontati: di solito due versioni dello stesso file. Git chiama i due versioni “A” e “B” — e assegna loro i simboli: A = meno (-), B = più (+).

Le prime righe (index ...) contengono metadati interni: gli hash dei due file confrontati e un identificatore di file mode. Puoi ignorarli.

Le modifiche sono raggruppate in chunk — sezioni di file che contengono cambiamenti. Il chunk header sta tra @@ e @@:

@@ -3,4 +3,5 @@

Significa: dal file A partendo dalla riga 3 vengono estratte 4 righe; dal file B dalla riga 3, 5 righe.

Ogni riga modificata porta un simbolo:

  • righe che iniziano con -: presenti in A, assenti in B (es. purple);
  • righe che iniziano con +: presenti in B, assenti in A (es. indigo, violet);
  • le righe senza simboli sono il contesto, mostrate per orientarsi.

Il @@ -22,6 +22,10 @@ h1 con la descrizione dopo l’head (es. h1) indica inoltre la sezione di codice in cui cade il chunk — molto comodo nei file lunghi.