Par Anonyme (non vérifié) , 29 avril 2026

Ce que vous accomplirez

Vous utiliserez git blame et git log ensemble pour reconstruire l'historique d'une ligne buguée, identifier quand et pourquoi un changement a été fait.

Configurer 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"

Étape 1 : blame de la ligne suspecte

git blame -L 2,3 calc.js

Étape 2 : inspecter le commit suspect

git show <sha>

Étape 3 : parcourir l'historique du fichier

git log --follow -p calc.js

Étape 4 : trouver quand une chaîne a été introduite

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

Étape 5 : blame en ignorant les commits formateurs

# .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

Étape 6 : blame à travers renames et déplacements

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

Étape 7 : log avec filtres détaillés

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

Étape 8 : log d'une région d'un fichier

git log -L 1,5:calc.js

Étape 9 : combiner avec bisect

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

Étape 10 : grapher la divergence

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

Workflow du monde réel

  1. Reproduire le bug.
  2. git blame de la ligne suspecte.
  3. git show du commit.
  4. Si trop grossier, git log -p -- file.
  5. Si plusieurs fichiers ont changé, git log -- 'src/**'.
  6. Si le message manque de contexte, demandez à l'auteur.

Étiquette

Blame est pour comprendre, pas pour pointer du doigt.

Tooling

GitLens de VS Code, annotate de JetBrains, et fugitive.vim dans Vim fournissent des UIs blame interactives.