git blame

Débogage

Montrer qui a modifié en dernier chaque ligne d’un fichier


La commande 'git blame' affiche un fichier avec, pour chaque ligne, le commit qui l’a modifiée en dernier, son auteur et sa date. C’est le moyen le plus rapide de comprendre pourquoi une ligne est ainsi : prenez le hash, puis lisez le commit complet avec git show. Les lignes pas encore committées sont marquées « Not Committed Yet ». Utilisez -L pour ne regarder que quelques lignes.

Synopsis

git blame [<options>] [<rev>] [--] <file>
[ ] facultatif| ou<arg> valeur à remplacer... répétable--flag option

Options

Cliquez sur une option pour la déplier

Débutant (2)

Annoter seulement la plage de lignes donnée, p. ex. -L 10,20 (ou une fonction avec -L :nom).

RecommandéConcentrez-vous sur les lignes que vous examinez

Exemple

git blame -L 12,14 app.js

Afficher l’e-mail de l’auteur au lieu de son nom.

Si nécessaireAfficher l’e-mail des auteurs quand les noms sont ambigus

Exemple

git blame -e app.js

Avancé (1)

Faire comme si un commit (p. ex. un gros reformatage) n’avait rien changé ; attribuer les lignes aux commits précédents.

Si nécessaireIgnorer les commits de pur formatage

Exemple

git blame --ignore-rev a1b2c3d app.js

Choisir la bonne option

Trouver d’où vient une modification

Trois outils, trois questions

CommandeRépond à
git blame fileQuel commit a touché chaque ligne en dernier ?
git log -p fileChaque modification jamais faite au fichier
git log -S "text"Quel commit a ajouté ou supprimé ce texte ?

Exemples

Blame d’un fichier

git blame app.js

Chaque ligne avec son dernier commit, son auteur et sa date.


Une plage de lignes

git blame -L 10,20 app.js

Seulement les lignes 10 à 20.


Une version plus ancienne

git blame v1.0 -- app.js

Blame du fichier tel qu’il était au tag v1.0.

Exemples de workflows

1
git blame -L 40,45 app.js

Trouver le commit de la ligne

2
git show a1b2c3d

Lire tout le commit et son message

Dépannage

fatal: no such path 'x' in HEAD

Cause : Le fichier n’est pas suivi, ou le chemin est faux

Committez d’abord le fichier, ou vérifiez le chemin

Chaque ligne pointe vers un commit de reformatage

Cause : Blame montre la DERNIÈRE modification

Utilisez --ignore-rev <commit>, ou faites le blame du commit d’avant

Astuces et pièges

Bonnes pratiques

  • ✓Lisez le commit (git show) avant de tirer des conclusions de blame.
  • ✓Tenez un fichier .git-blame-ignore-revs listant les commits de pur formatage.

Erreurs fréquentes

  • ✗Prendre blame au pied de la lettre : la dernière personne à toucher une ligne n’a peut-être fait que la reformater.
  • ✗S’arrêter à un commit de formatage au lieu de faire un blame de son parent (git blame <hash>^ -- file).
  • ✗Oublier -L sur de gros fichiers et faire défiler des milliers de lignes.

FAQ

A:

La ligne vient du premier commit de l’historique : blame ne pouvait pas remonter plus loin.

A:

Une ligne modifiée dans votre copie de travail mais pas encore committée.