git blame
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>Options
Choisir la bonne option
Trouver d’où vient une modification
Trois outils, trois questions
| Commande | Répond à |
|---|---|
git blame file | Quel commit a touché chaque ligne en dernier ? |
git log -p file | Chaque 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.jsChaque ligne avec son dernier commit, son auteur et sa date.
Une plage de lignes
git blame -L 10,20 app.jsSeulement les lignes 10 à 20.
Une version plus ancienne
git blame v1.0 -- app.jsBlame du fichier tel qu’il était au tag v1.0.
Exemples de workflows
git blame -L 40,45 app.jsTrouver le commit de la ligne
git show a1b2c3dLire 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
La ligne vient du premier commit de l’historique : blame ne pouvait pas remonter plus loin.
Une ligne modifiée dans votre copie de travail mais pas encore committée.