Visualizzazione post con etichetta --staged. Mostra tutti i post
Visualizzazione post con etichetta --staged. Mostra tutti i post

lunedì 15 settembre 2025

Git: Visualizzare le modifiche tracciate e non tracciate

Il comando git status fornisce una panoramica dello stato del repository, ma talvolta può risultare troppo generico: mostra quali file sono stati modificati, senza però evidenziare nel dettaglio quali righe siano cambiate.

Per ottenere una visione più approfondita delle differenze, è possibile utilizzare il comando git diff, che permette di ispezionare direttamente le modifiche a livello di contenuto.

In particolare, il comando git diff consente di ottenere risposte a due quesiti fondamentali:
  • Quali modifiche sono state effettuate ma non ancora aggiunte all’area di staging?
  • Quali modifiche risultano già presenti nello staging e che, di conseguenza, verranno incluse nel prossimo commit?


Differenze tra file modificati e staging area

Supponiamo, ad esempio, di modificare il file Readme.txt e di aggiungerlo allo staging con git add, mentre contestualmente modifichiamo il file Project1.cs senza però metterlo in staging.

Un comando git status restituirà un output simile a quello mostrato in FIG 1

git status
FIG 1 - git status


In questa situazione, se eseguiamo:

git diff

Git ci mostrerà le modifiche presenti nel working directory ma non ancora aggiunte allo staging. Questo output, detto patch, include esattamente le righe aggiunte (+) e rimosse (-) nei file.

git diff
FIG 2 - git diff

Al contrario, se desideriamo visualizzare le differenze già pronte per il prossimo commit, dobbiamo usare:

git diff --staged

oppure, in alternativa:

git diff --cached

(--staged e --cached sono sinonimi). Questo comando confronta le modifiche presenti nello staging con l’ultimo commit registrato.

git diff --staged
FIG 3 - git diff --staged

Caso pratico: modifiche sia staged che unstaged

Può accadere che lo stesso file venga modificato, aggiunto allo staging e poi ulteriormente modificato senza essere riaggiunto. In questo caso, git diff e git diff --staged mostrano rispettivamente:

  • le differenze non ancora aggiunte,
  • le differenze già pronte per essere salvate nel commit successivo.

Questo scenario è comune durante lo sviluppo, e l’uso combinato dei due comandi consente di avere il massimo controllo su ciò che sarà effettivamente registrato nella cronologia del progetto.

Nota importante: È bene sottolineare che git diff, se usato da solo, non mostra tutte le modifiche rispetto all’ultimo commit, ma solo quelle ancora unstaged.

Se tutte le modifiche sono state aggiunte allo staging, il comando non produrrà alcun output. In questi casi, l’opzione --staged è necessaria per visualizzare le differenze.


Utilizzo di strumenti esterni: git difftool

Per chi preferisce un’interfaccia grafica o un visualizzatore esterno, Git mette a disposizione il comando git difftool. Questo consente di analizzare le differenze utilizzando software come vimdiff, meld, kdiff3, o strumenti commerciali come Beyond Compare e Araxis Merge.

git difftool, richiesta avvio tool per la comparazione
FIG 4 - git difftool, richiesta avvio tool per la comparazione


Differenze nel file Project1.cs
FIG 5 - Differenze nel file Project1.cs

Per scoprire quali strumenti sono disponibili sul proprio sistema:

git difftool --tool-help

È possibile configurare uno strumento di default nel file di configurazione globale:

git config --global diff.tool meld

Da quel momento, eseguendo git difftool senza ulteriori opzioni, Git aprirà automaticamente le differenze nell’applicativo scelto.


Best practices

  • Usare spesso git diff: controllare con regolarità le differenze riduce il rischio di commettere modifiche indesiderate.
  • Verificare prima di committare: un git diff --staged prima di eseguire il commit assicura che solo le modifiche realmente volute vengano salvate nella cronologia.
  • Configurare strumenti grafici: in progetti complessi, visualizzatori esterni possono facilitare l’analisi di modifiche estese.


Di seguito una tabella riepilogativa dei principali comandi di Git usati per analizzare lo stato dei file e le modifiche:

Comando Scopo principale Cosa mostra Quando usarlo Output
git status Fornisce una panoramica dello stato del repository Elenco dei file modificati, non tracciati, staged o unstaged Per avere una visione generale prima di committare Testuale, descrittivo (ma non mostra le differenze riga per riga)
git diff Mostra le modifiche non ancora aggiunte allo staging (unstaged) Differenze tra working directory e staging area Per sapere esattamente cosa è cambiato nei file non ancora aggiunti Patch con righe aggiunte (+) e rimosse (-)
git diff --staged (o git diff --cached) Mostra le modifiche già aggiunte allo staging Differenze tra staging area e ultimo commit Per verificare cosa verrà incluso nel prossimo commit Patch dettagliata delle modifiche staged
git difftool Visualizza le differenze con uno strumento esterno Identico a git diff (staged o unstaged, a seconda dei parametri), ma in interfaccia grafica o editor Per analizzare modifiche complesse o in progetti estesi Dipende dallo strumento scelto (es. vimdiff, meld, Beyond Compare, ecc.)