Da Anonimo (non verificato) , 29 Aprile 2026

Cosa otterrai

Userai git blame e git log insieme per ricostruire la storia di una riga buggata.

Configurare un sandbox

mkdir blame-tutorial && cd blame-tutorial
git init
cat > calc.js <<'EOF'
function divide(a, b) {
  return a / b;
}
module.exports = { divide };
EOF
git add . && git commit -m "Initial divide function"

sed -i.bak '2i\
  if (b === 0) throw new Error("Division by zero");
' calc.js && rm calc.js.bak
git commit -am "Add zero check"

sed -i.bak 's|if (b === 0)|if (b == 0)|' calc.js && rm calc.js.bak
git commit -am "Style: use loose equality for zero check"

Passo 1: blame della riga sospetta

git blame -L 2,3 calc.js

Passo 2: ispezionare il commit sospetto

git show <sha>

Passo 3: camminare nella storia del file

git log --follow -p calc.js

Passo 4: trovare quando una stringa e stata introdotta

git log -S 'Division by zero' --oneline -- calc.js
git log -G 'b\\s*[!=]==?\\s*0' --oneline -- calc.js

Passo 5: blame ignorando commit di formatter

# .git-blame-ignore-revs
abc1234   # Apply prettier across codebase
def5678   # Apply black to all Python
git config blame.ignoreRevsFile .git-blame-ignore-revs
git blame -L 2,3 calc.js

Passo 6: blame attraverso rinominazioni e movimenti

git blame -M calc.js
git blame -C calc.js
git blame -CCC calc.js

Passo 7: log con filtri dettagliati

git log --since='1 month' --author='Alice'
git log --grep='checkout'
git log -p -L :divide:calc.js

Passo 8: log di una regione di un file

git log -L 1,5:calc.js

Passo 9: combinare con bisect

git bisect start
git bisect bad HEAD
git bisect good v1.0.0
git bisect run npm test

Passo 10: graficare la divergenza

git log --graph --oneline --all -20

Workflow reale

  1. Riprodurre il bug.
  2. git blame della riga sospetta.
  3. git show del commit; leggere il messaggio.
  4. Camminare nella storia del file se necessario.
  5. Chiedere all'autore.

Etichetta

Blame e per capire, non per puntare il dito.

Tooling

GitLens di VS Code, annotate JetBrains, fugitive.vim.