Da Anonimo (non verificato) , 29 Aprile 2026

Introduzione

git log percorre il grafo dei commit da un punto di partenza (predefinito: HEAD) all'indietro attraverso i parent, stampando ogni commit. È lo strumento principale per esplorare la storia del progetto.

Uso di base

git log
git log --oneline
git log --oneline --graph --decorate --all

L'ultima forma è la vista coltellino svizzero: un grafico compatto di ogni branch con i ref decorati.

Filtrare per data, autore, messaggio

git log --since="2 weeks ago"
git log --until=2025-01-01
git log --author="Ada"
git log --grep="bugfix"
git log -S "deprecated_function"   # pickaxe: quando è apparsa una stringa?

-S è prezioso per l'archeologia: trova i commit che cambiano il numero di occorrenze di una stringa in qualsiasi file.

Mostrare i diff

git log -p                 # patch completa per commit
git log --stat             # file modificati più conteggi +/-
git log --shortstat        # solo riga di riepilogo
git log -p -- path/to/file # solo commit che toccano un path

Formati personalizzati

--pretty=format: accetta segnaposto. Una utile riga singola:

git log --pretty=format:"%h %an %ad %s" --date=short

%h hash abbreviato, %an nome autore, %ad data autore, %s oggetto. Vedi git help log per la lista completa.

Limiti e range

git log -n 5                       # ultimi 5 commit
git log main..feature              # commit su feature non su main
git log main...feature             # differenza simmetrica
git log feature ^main              # uguale a main..feature

Seguire i rename dei file

Git non registra i rename, li rileva. Per seguire la storia attraverso un rename:

git log --follow -- path/to/file

Alias utili

Una manciata di alias per git log si ripaga nella prima settimana. Due particolarmente buoni:

git config --global alias.lg "log --oneline --graph --decorate --all"
git config --global alias.last "log -1 HEAD --stat"
git config --global alias.recent "log --since='2 weeks ago' --author=$(git config user.email)"

git lg dà la vista dall'alto del grafo; git last mostra cosa è appena successo; git recent risponde a "su cosa ho lavorato ultimamente?". Aggiungi un alias per ogni invocazione di log che digiti più di due volte.

Inverso e limite

Per impostazione predefinita git log percorre dal più nuovo al più vecchio. A volte (note di rilascio, archeologia del codice) vuoi l'opposto, abbinato a un formato pulito:

git log --reverse --oneline v1.0.0..v1.1.0
git log --reverse --pretty=format:"* %s (%h)" v1.0.0..HEAD > CHANGELOG.draft

Qui pickaxe e i filtri di path danno il loro meglio: git log --reverse -S "old_api" -- src/ mostra la storia cronologica dell'apparizione e scomparsa di una stringa, perfetto per tracciare le deprecazioni.

Errori comuni

Leggere solo la storia di HEAD e perdere i commit su altri branch; passa --all per vederli. Confondere --author (una regex sul campo autore) con una corrispondenza esatta letterale; quota il pattern con cura. Usare git log file invece di git log -- file: il separatore -- disambigua i path dai ref, specialmente se un branch e un file condividono un nome. Infine, aspettarsi che git log mostri i commit cancellati dopo un force-reset; usa git reflog per quello. git log percorre solo la storia raggiungibile.