Dopo aver effettuato diversi commit, oppure quando si clona un repository con una cronologia già esistente, è fondamentale poter analizzare lo storico delle modifiche.
Lo strumento principale messo a disposizione da Git per questo scopo è il comando git log, che consente di ispezionare in dettaglio l’evoluzione di un progetto.
Il comando più semplice è:
L’output predefinito elenca i commit in ordine cronologico inverso, mostrando per ciascun commit:
- l’hash SHA-1 univoco
- l’autore con email
- la data
- il messaggio di commit
![]() |
FIG 1 - git log |
Opzioni utili di git log
Git mette a disposizione un’ampia gamma di opzioni per adattare l’output alle proprie esigenze.
- L’opzione -p (o --patch) visualizza le differenze introdotte.
- Il parametro -2 limita l’output agli ultimi due commit.
- Utile in fase di code review o per analizzare l’evoluzione del codice.
![]() |
FIG 2 - git log -p -2 |
git log --stat
Mostra i file modificati, il numero di righe aggiunte/rimosse e un riepilogo finale.
![]() |
FIG 3 - git log --stat |
Consente di definire un formato personalizzato dell’output, utile per generare report o output leggibili da script.
Segnaposto | Descrizione |
---|---|
%H | Hash completo del commit |
%h | Hash abbreviato |
%T | Hash dell'albero |
%t | Hash dell'albero abbreviato |
%P | Hash dei genitori |
%p | Hash dei genitori abbreviati |
%an | Nome autore |
%ae | Email autore |
%ad | Data autore (formato configurabile con --date= ) |
%ar | Data autore relativa (es. “2 weeks ago”) |
%cn | Nome committer |
%ce | Email committer |
%cd | Data del committer |
%cr | Data del committer, relativa |
%s | Messaggio del commit |
![]() |
FIG 4 - git log --pretty=format |
git log --oneline
commit in una sola riga (hash abbreviato + messaggio).git log --pretty=short|full|fuller
diversi livelli di dettaglio.git log --abbrev-commit
mostra solo le prime cifre dell’hash.
![]() |
FIG 5 - git log --oneline |
![]() |
FIG 6 - git log --graph |
Opzioni per limitare l'output di git log
![]() |
FIG 7 - git log -2 |
mostra commit scritti da un certo autore.
mostra commit applicati da uno specifico committer.
Tabelle riepilogative delle opzioni comuni
Opzione | Descrizione |
---|---|
-p o --patch | Mostra le differenze introdotte da ciascun commit |
--stat | Riepilogo file modificati e righe aggiunte/rimosse |
--shortstat | Solo il riepilogo numerico (senza elenco file) |
--name-only | Elenco dei file modificati |
--name-status | Elenco file + stato (A=Added, M=Modified, D=Deleted) |
--abbrev-commit | Hash abbreviati |
--relative-date | Date in formato relativo (“2 days ago”) |
--graph | Grafico ASCII della cronologia |
--pretty | Formati alternativi (oneline , short , full , fuller , format ) |
--oneline | Alias di --pretty=oneline --abbrev-commit. Mostra ogni commit su una singola riga |
Opzioni di filtro
Opzione | Descrizione |
---|---|
-n <numero> | Limita il numero di commit visualizzati all'ultimo <numero> specificato |
--author="<pattern>" | Filtra i commit in base all'autore. Accetta anche espressioni regolari. |
--committer="<pattern>" | Filtra i commit in base al committer. |
--grep="<pattern>" | Filtra i commit in base a un pattern nel messaggio del commit. |
--since="<data>" | Visualizza i commit a partire da una data specificata("2 weeks ago", "2023-01-01", "yesterday"). |
--until="<data>" | Visualizza i commit fino a una data specificata. |
--after="<data>" | Alias di --since |
--before="<data>" | Alias di --until |
<file-o-cartella> | Mostra solo i commit che hanno modificato un file o una cartella specifica |
--merges | Mostra solo i commit di merge. |
--no-merges | Esclude i commit di merge dalla visualizzazione. |
Opzione | Descrizione |
---|---|
--reverse | Limita il numero di commit visualizzati all'ultimo <numero> specificato |
<start>..<end> | Filtra i commit in base all'autore. Accetta anche espressioni regolari. |
-S"<stringa>" | Mostra i commit che hanno introdotto o rimosso una riga contenente una stringa specifica. Utile per il debugging. |
-G"<regex>" | Simile a -S, ma usa un'espressione regolare per cercare le modifiche nel contenuto dei file |
Differenza tra autore e committer
- Autore (Author): chi ha scritto originariamente la modifica.
- Committer: chi ha applicato la modifica al repository (può coincidere con l’autore o essere un maintainer che ha accettato una patch).
Questo permette di riconoscere sia chi ha prodotto il codice sia chi ne ha garantito l’integrazione
Esempio avanzato
Visualizzare i commit:
- scritti da Giovanni Lubrano Lavadera,
- nel mese di novembre 2024,
- che non siano merge commit,
- relativi alla directory
test/