Corso
Git è uno strumento potente per tracciare le modifiche al codice: aiuta in particolare i team a tenerne traccia, collaborare in modo efficiente e fare debug. Offre vari strumenti per gestire la cronologia del codice; uno dei più utili è git blame. Questo comando aiuta gli sviluppatori a rintracciare l’origine di ogni riga in un file, mostrando chi l’ha modificata per ultimo e quando.
In questo articolo, vedremo come usare git blame per tracciare le modifiche in un progetto. Partiremo dai comandi di base e passeremo gradualmente a funzionalità avanzate come l’ignorare revisioni specifiche, l’integrazione con gli strumenti di sviluppo e le buone pratiche. Alla fine avrai una solida comprensione di come analizzare efficacemente la cronologia del codice e migliorare la collaborazione nel tuo team.
Che cos’è Git Blame?
Le modifiche al codice possono essere difficili da tracciare, soprattutto in progetti di grandi dimensioni con più contributori. Capire la cronologia di un file è fondamentale per il debug, per rivedere decisioni passate e per mantenere la qualità del codice. Senza una cronologia chiara, i team possono faticare a capire perché è stata fatta una certa modifica o a chi chiedere chiarimenti.
Qui git blame diventa prezioso. Ti permette di individuare le modifiche a un livello granulare, rivelando i dettagli dei commit accanto a ogni riga di codice. Con queste informazioni, puoi trovare rapidamente il commit rilevante, controllare il messaggio associato e vedere il contesto più ampio della modifica. Che tu stia risolvendo un bug, rivedendo modifiche o semplicemente cercando di capire l’evoluzione di un file, git blame offre gli spunti necessari per prendere decisioni informate.

Perché usare git blame?
Quando lavori in team o stai facendo debug di un problema, sapere chi ha modificato per ultimo una riga di codice può essere utile. Se un bug compare dopo un aggiornamento recente, git blame aiuta a individuare l’esatta modifica che ha introdotto il problema. Consente anche agli sviluppatori di contattare la persona giusta quando serve un chiarimento su uno specifico aspetto.
Questo comando è utile anche per comprendere la logica dietro le modifiche. I commenti nel codice e i messaggi dei commit a volte non catturano l’intero processo decisionale. Tracciando una modifica fino a uno specifico commit, gli sviluppatori possono rivedere le discussioni correlate e vedere il quadro generale.

Puoi saperne di più nel nostro tutorial su Git e GitHub, una guida per principianti che spiega come funziona il controllo di versione con Git e ne evidenzia il ruolo cruciale nei progetti di data science.
Uso di base di git blame
La sintassi di base di git blame è:
git blame <file>
Questo comando annota ogni riga con l’ultimo commit che l’ha modificata, includendo autore, timestamp e hash del commit. Ecco un esempio:
$ git blame example.py
derrickmwiti@Derricks-MacBook-Pro remixer % git blame src/components/ContentGenerator.vue
^28203e0 (Derrick Mwiti 2025-03-10 17:48:31 +0300 1) <template>
^28203e0 (Derrick Mwiti 2025-03-10 17:48:31 +0300 2) <div class="content-generator">
^28203e0 (Derrick Mwiti 2025-03-10 17:48:31 +0300 3) <div class="card h-100 border-0 shadow-sm">
^28203e0 (Derrick Mwiti 2025-03-10 17:48:31 +0300 4) <div class="card-header bg-white border-bottom-0 pt-4">
^28203e0 (Derrick Mwiti 2025-03-10 17:48:31 +0300 5) <div class="d-flex justify-content-between align-items-center mb-3">
289030a0 (Derrick Mwiti 2025-03-11 12:47:11 +0300 6) <div class="d-flex align-items-center gap-2">
289030a0 (Derrick Mwiti 2025-03-11 12:47:11 +0300 7) <h5 class="mb-0">Content Generator</h5>
289030a0 (Derrick Mwiti 2025-03-11 12:47:11 +0300 8) <span class="badge bg-secondary" v-if="openaiModel">{{ openaiModel }}</span>
289030a0 (Derrick Mwiti 2025-03-11 12:47:11 +0300 9) </div>
^28203e0 (Derrick Mwiti 2025-03-10 17:48:31 +0300 10) </div>
^28203e0 (Derrick Mwiti 2025-03-10 17:48:31 +0300 11)
^28203e0 (Derrick Mwiti 2025-03-10 17:48:31 +0300 12)
^28203e0 (Derrick Mwiti 2025-03-10 17:48:31 +0300 13) <nav>
^28203e0 (Derrick Mwiti 2025-03-10 17:48:31 +0300 14) <div class="nav nav-tabs card-header-tabs gap-1" id="nav-tab" role="tablist">
^28203e0 (Derrick Mwiti 2025-03-10 17:48:31 +0300 15) <button
^28203e0 (Derrick Mwiti 2025-03-10 17:48:31 +0300 16) v-for="platform in platforms"
^28203e0 (Derrick Mwiti 2025-03-10 17:48:31 +0300 17) :key="platform"
^28203e0 (Derrick Mwiti 2025-03-10 17:48:31 +0300 18) class="nav-link"
Ogni riga contiene:
- L’hash del commit (
^3b1aef2e^8f2c4d3) - Il nome dell’autore (Derrick Mwiti)
- Il timestamp dell’ultima modifica
- La riga di codice effettiva
Applicazioni pratiche di Git Blame
Ora che conosci la sintassi di base di git blame, vediamo come applicarlo negli scenari di sviluppo quotidiani.
Trovare l’autore di una riga specifica
Se un file è grande e ti serve ispezionare solo una parte, specifica un intervallo di righe:
derrickmwiti@Derricks-MacBook-Pro remixer % git blame -L 10,20 src/components/ContentGenerator.vue
^28203e0 (Derrick Mwiti 2025-03-10 17:48:31 +0300 10) </div>
^28203e0 (Derrick Mwiti 2025-03-10 17:48:31 +0300 11)
^28203e0 (Derrick Mwiti 2025-03-10 17:48:31 +0300 12)
^28203e0 (Derrick Mwiti 2025-03-10 17:48:31 +0300 13) <nav>
^28203e0 (Derrick Mwiti 2025-03-10 17:48:31 +0300 14) <div class="nav nav-tabs card-header-tabs gap-1" id="nav-tab" role="tablist">
^28203e0 (Derrick Mwiti 2025-03-10 17:48:31 +0300 15) <button
^28203e0 (Derrick Mwiti 2025-03-10 17:48:31 +0300 16) v-for="platform in platforms"
^28203e0 (Derrick Mwiti 2025-03-10 17:48:31 +0300 17) :key="platform"
^28203e0 (Derrick Mwiti 2025-03-10 17:48:31 +0300 18) class="nav-link"
^28203e0 (Derrick Mwiti 2025-03-10 17:48:31 +0300 19) :class="{ active: activeTab === platform }"
^28203e0 (Derrick Mwiti 2025-03-10 17:48:31 +0300 20) :id="nav-${platform}-tab"
Questo si concentra sulle righe 10–20, rendendo più semplice trovare le modifiche rilevanti.
Capire le modifiche con git show
Mentre git blame evidenzia l’ultima modifica a ogni riga, non spiega cosa sia stato cambiato in quel commit. Per vedere più dettagli, usa git show <commit-hash>:
derrickmwiti@Derricks-MacBook-Pro remixer % git show 28203e0
commit 28203e0f7cbe92c6baf6897a54686e87d16c9cda
Author: Derrick Mwiti <mwitiderrick@gmail.com>
Date: Mon Mar 10 17:48:31 2025 +0300
diff --git a/.editorconfig b/.editorconfig
new file mode 100644
index 0000000..5a5809d
--- /dev/null
+++ b/.editorconfig
@@ -0,0 +1,9 @@
+[*.{js,jsx,mjs,cjs,ts,tsx,mts,cts,vue,css,scss,sass,less,styl}]
+charset = utf-8
+indent_size = 2
+indent_style = space
+insert_final_newline = true
+trim_trailing_whitespace = true
+
+end_of_line = lf
+max_line_length = 100
diff --git a/.env b/.env
:
Sostituendo <commit-hash> con l’ID di commit effettivo da git blame ottieni il messaggio completo del commit e il diff del codice, utile per capire il motivo della modifica.
Per approfondire, dai un’occhiata al nostro tutorial su Git Diff per imparare a usare git diff per tracciare efficacemente le modifiche al codice, dai confronti di base alle tecniche avanzate.
Funzionalità avanzate di Git Blame
Ecco alcuni modi più articolati in cui puoi utilizzare Git blame nel flusso di lavoro:
Ignorare le modifiche agli spazi bianchi
Alcune modifiche di formattazione, come la sistemazione dell’indentazione, non influiscono sulla logica. Per filtrare queste modifiche, usa git blame -w <file>:
derrickmwiti@Derricks-MacBook-Pro remixer % git blame -w src/components/ContentGenerator.vue
^28203e0 (Derrick Mwiti 2025-03-10 17:48:31 +0300 1) <template>
^28203e0 (Derrick Mwiti 2025-03-10 17:48:31 +0300 2) <div class="content-generator">
^28203e0 (Derrick Mwiti 2025-03-10 17:48:31 +0300 3) <div class="card h-100 border-0 shadow-sm">
^28203e0 (Derrick Mwiti 2025-03-10 17:48:31 +0300 4) <div class="card-header bg-white border-bottom-0
Ignorare revisioni specifiche
Se alcuni commit (come i refactoring massivi di formattazione) appesantiscono la cronologia di blame, possono essere ignorati con git blame --ignore-rev <commit-hash> <file>:
derrickmwiti@Derricks-MacBook-Pro remixer % git blame --ignore-rev 28203e0 src/components/ContentGenerator.vue
^28203e0 (Derrick Mwiti 2025-03-10 17:48:31 +0300 1) <template>
^28203e0 (Derrick Mwiti 2025-03-10 17:48:31 +0300 2) <div class="content-generator">
^28203e0 (Derrick Mwiti 2025-03-10 17:48:31 +0300 3) <div class="card h-100 border-0 shadow-sm">
^28203e0 (Derrick Mwiti 2025-03-10 17:48:31 +0300 4) <div class="card-header bg-white border-bottom-0 pt-4">
^28203e0 (Derrick Mwiti 2025-03-10 17:48:31 +0300 5) <div class="d-flex justify-content-between align-items-center mb-3">
289030a0 (Derrick Mwiti 2025-03-11 12:47:11 +0300 6) <div class="d-flex align-items-center gap-2">
Per ignorare in modo coerente più commit, puoi elencarli in un file e farvi riferimento con l’opzione --ignore-revs-file. Questo aiuta a mantenere una cronologia di blame pulita escludendo le modifiche irrilevanti.
Nella directory root del tuo repository, crea un file chiamato .git-blame-ignore-revs. Elenca gli hash dei commit da ignorare, aggiungendo facoltativamente commenti per chiarezza:
# Commit che introduce modifiche di formattazione del codice
a926bba49c89a5b882cd298be3af2570b1e6252c
Esegui il seguente comando per ignorare le revisioni specificate:
git blame --ignore-revs-file .git-blame-ignore-revs filename
Esegui il seguente comando per dire a Git di usare il tuo file di ignore per impostazione predefinita:
git config blame.ignoreRevsFile .git-blame-ignore-revs
Visualizzare le email degli autori invece dei nomi
Per mostrare l’email dell’autore invece del nome:
derrickmwiti@Derricks-MacBook-Pro remixer % git blame --show-email src/components/PostsManager.vue
dbe547ec (<derrick@gmail.com> 2025-03-11 09:22:59 +0300 1) <template>
dbe547ec (<derrick@gmail.com> 2025-03-11 09:22:59 +0300 2) <div class="posts-manager">
dbe547ec (<derrick@gmail.com> 2025-03-11 09:22:59 +0300 3) <h3>Saved Posts</h3>
dbe547ec (<derrick@gmail.com> 2025-03-11 09:22:59 +0300 4)
dbe547ec (<derrick@gmail.com> 2025-03-11 09:22:59 +0300 5) <div v-if="loading" class="text-center my-4">
dbe547ec (<derrick@gmail.com> 2025-03-11 09:22:59 +0300 6) <div class="spinner-border text-primary" role="status">
Può essere utile per contattare la persona responsabile di una modifica specifica.
Mostrare gli hash completi dei commit
Per impostazione predefinita, git blame mostra hash abbreviati. Per vedere gli hash completi, esegui:
derrickmwiti@Derricks-MacBook-Pro remixer % git blame --abbrev=40 src/components/PostsManager.vue
dbe547ec4ece7cb2a1ff3dadb4770cc9ee9f161e (Derrick Mwiti 2025-03-11 09:22:59 +0300 1) <template>
dbe547ec4ece7cb2a1ff3dadb4770cc9ee9f161e (Derrick Mwiti 2025-03-11 09:22:59 +0300 2) <div class="posts-manager">
dbe547ec4ece7cb2a1ff3dadb4770cc9ee9f161e (Derrick Mwiti 2025-03-11 09:22:59 +0300 3) <h3>Saved Posts</h3>
dbe547ec4ece7cb2a1ff3dadb4770cc9ee9f161e (Derrick Mwiti 2025-03-11 09:22:59 +0300 4)
dbe547ec4ece7cb2a1ff3dadb4770cc9ee9f161e (Derrick Mwiti 2025-03-11 09:22:59 +0300 5) <div v-if="loading" class="text-center my-4">
Puoi regolare la lunghezza dell’abbreviazione di Git blame con l’opzione --abbrev=<n>.
Usare git blame in Visual Studio Code
Per gli sviluppatori che usano Visual Studio Code, l’estensione Git Blame offre supporto integrato per git blame.

Questa estensione permette di:
- Vedere le annotazioni di blame in linea.
- Passare il mouse sulle righe per vedere i dettagli del commit.
- Accedere alla cronologia completa del file e delle singole righe.
Best practice per Git Blame
Mantenere un file .git-blame-ignore-revs assicura che i commit di formattazione non intasino la cronologia di blame. Quando lavori in team, è utile che tutti seguano le stesse convenzioni per ignorare le revisioni.
Quando usi git blame, l’obiettivo dovrebbe essere sempre capire il motivo delle modifiche, non attribuire colpe. È uno strumento per imparare e migliorare la collaborazione, aiutando gli sviluppatori a lavorare insieme in modo più efficiente.

Conclusione
In questo articolo, abbiamo visto come git blame può aiutare gli sviluppatori a tracciare le modifiche nel loro codice. Dall’uso di base alle funzionalità avanzate, abbiamo esplorato come questo comando offra chiarezza su chi ha modificato un file e quando.
Puoi ottimizzare questo comando integrandolo con altri strumenti Git, come git show e configurando le revisioni da ignorare. Che tu stia facendo debug, rivedendo modifiche o semplicemente cercando di capire la cronologia di un file, git blame offre spunti preziosi che migliorano la manutenzione del codice e la collaborazione.
Padroneggiare strumenti come git blame ti aiuta a orientarti nelle codebase con sicurezza, collaborare in modo più efficace e mantenere cronologie di progetto più pulite. Non si tratta solo di scoprire chi ha cambiato una riga, ma perché—e usare queste informazioni per costruire software migliore. Per approfondire l’ecosistema Git, dai un’occhiata al nostro corso completo su Git o prova il nostro corso Git intermedio.
Git Blame: domande frequenti
Come posso ignorare le modifiche agli spazi bianchi in git blame?
Puoi usare l’opzione -w per ignorare le modifiche che riguardano solo gli spazi bianchi, come l’indentazione o gli aggiustamenti degli spazi.
Come trovo i dettagli del commit di una modifica specifica in git blame?
Dopo aver identificato un hash di commit con git blame, usa git show per vedere i dettagli del commit, incluse le modifiche apportate.
Come posso escludere alcuni commit dai risultati di git blame?
Se vuoi ignorare commit specifici (ad es. modifiche di formattazione del codice), usa:
git blame --ignore-rev <commit-hash> <file>
Per ignorare più commit, salvali in un file .git-blame-ignore-revs ed esegui:
git blame --ignore-revs-file .git-blame-ignore-revs <file>Esiste un modo per usare git blame in Visual Studio Code?
Sì, l’estensione Git Blame in VS Code fornisce annotazioni di blame in linea, cronologia dei commit e dettagli approfonditi. Puoi abilitare o personalizzare le annotazioni tramite le sue impostazioni.

