Accéder au contenu principal

Le blâme de Git expliqué : Comment retracer l'historique du code et collaborer plus intelligemment ?

Curus : apprenez à utiliser Git Blame pour suivre les modifications de code, identifier les auteurs et comprendre l'historique des fichiers. Ce guide couvre les commandes de base, les fonctionnalités avancées et les intégrations pour améliorer vos compétences en matière de débogage et de collaboration.
Actualisé 26 mars 2025  · 9 min de lecture

Git est un outil puissant pour le suivi des modifications de code, en particulier pour aider les équipes à les suivre, à collaborer efficacement et à déboguer les problèmes. Il fournit divers outils pour gérer l'historique du code ; l'un des plus utiles est git blame. Cette commande permet aux développeurs de retracer l'origine de chaque ligne d'un fichier, en indiquant qui l'a modifié en dernier et quand.

Dans cet article, nous allons voir comment utiliser git blame pour suivre les modifications apportées à un projet. Nous commencerons par les commandes de base et passerons progressivement à des fonctionnalités avancées telles que l'ignorance de révisions spécifiques, l'intégration avec des outils de développement et l'utilisation des meilleures pratiques. À la fin de cette formation, vous saurez comment analyser efficacement l'historique du code et améliorer la collaboration au sein de votre équipe.

Qu'est-ce que Git Blame ?

Il peut être difficile de suivre les modifications apportées au code, en particulier dans le cadre de projets de grande envergure auxquels participent de nombreux contributeurs. La compréhension de l'historique d'un fichier est cruciale pour le débogage, l'examen des décisions antérieures et le maintien de la qualité du code. En l'absence d'un historique clair, les équipes peuvent avoir du mal à déterminer pourquoi un changement particulier a été effectué ou à qui demander des éclaircissements.

C'est là que le site git blame devient inestimable. Il vous permet de repérer les modifications à un niveau granulaire, en révélant les détails des livraisons à côté de chaque ligne de code. Grâce à ces informations, vous pouvez rapidement trouver le commit pertinent, vérifier le message associé et voir le contexte plus large de la modification. Que vous cherchiez à résoudre un bogue, à examiner des modifications ou simplement à comprendre l'évolution d'un fichier, git blame vous fournit les informations nécessaires pour prendre des décisions éclairées.

Comprendre Git Blame : Guide du développeur

Pourquoi utiliser git blame ?

Lorsque vous travaillez en équipe ou que vous déboguez un problème, il peut être utile de savoir qui a édité une ligne de code en dernier. Si un bogue apparaît après une mise à jour récente, git blame vous aide à identifier le changement exact qui a introduit le problème. Il permet également aux développeurs de s'adresser à la bonne personne lorsqu'ils ont besoin d'éclaircissements sur une question spécifique.

Cette commande est également utile pour comprendre le raisonnement qui sous-tend les changements. Les commentaires de code et les messages de validation ne parviennent pas toujours à rendre compte de l'ensemble du processus de réflexion. En remontant une modification jusqu'à un commit spécifique, les développeurs peuvent passer en revue les discussions connexes et avoir une vue d'ensemble.

Pourquoi utiliser git blame ?

Vous pouvez en savoir plus dans notre tutoriel Git et GitHub, qui sert de guide pour les débutants, expliquant le fonctionnement du contrôle de version Git et soulignant son rôle crucial dans les projets de science des données.

Utilisation de base de git blame

La syntaxe de base de git blame est la suivante :

git blame <file>

Cette commande annote chaque ligne avec le dernier commit qui l'a modifiée, y compris l'auteur, l'horodatage et le hachage du commit. En voici un exemple :

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

Chaque ligne contient

  • Le hachage de l'engagement (^3b1aef2 et ^8f2c4d3)
  • Le nom de l'auteur (Derrick Mwiti)
  • Date de la dernière modification
  • La ligne de code actuelle

Applications pratiques de Git Blame

Maintenant que vous comprenez la syntaxe de base de git blame, voyons comment vous pouvez l'appliquer dans des scénarios de développement quotidiens.

Trouver l'auteur d'une ligne spécifique

Si un fichier est volumineux et que vous ne devez inspecter qu'une partie, spécifiez une plage de lignes :

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"

Il se concentre sur les lignes 10 à 20, ce qui permet de repérer plus facilement les modifications pertinentes.

Comprendre les changements à l'aide de git show

Bien que git blame mette en évidence la dernière modification apportée à chaque ligne, il n'explique pas ce qui a été modifié dans ce commit. Pour plus de détails, utilisez git show :

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
:

En remplaçant par l'identifiant de livraison actuel de git blame, on obtient le message de livraison complet et la différence de code, ce qui permet de comprendre la raison de la modification.

Pour en savoir plus, consultez notre tutoriel tutoriel Git Diff pour apprendre à utiliser git diff pour suivre efficacement les modifications de code, des comparaisons de base aux techniques avancées.

Fonctionnalités avancées de Git Blame

Voici quelques-uns des moyens les plus efficaces d'utiliser les blâmes de Git dans un flux de travail : 

Ignorer les changements d'espacement

Certaines modifications de formatage, telles que l'indentation, n'ont pas d'incidence sur la logique. Pour les filtrer, utilisez git blame -w :

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

Ignorer des révisions spécifiques

Si certains commits (comme le reformatage en masse) encombrent l'historique des reproches, ils peuvent être ignorés avec git blame --ignore-rev :

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

Pour ignorer plusieurs commits de manière cohérente, vous pouvez les lister dans un fichier et y faire référence à l'aide de l'option --ignore-revs-file. Cela permet de conserver un historique de reproches propre en excluant les changements non pertinents.

Dans le répertoire racine de votre référentiel, créez un fichier nommé .git-blame-ignore-revs. Liste les hashs de commit à ignorer, en ajoutant éventuellement des commentaires pour plus de clarté :

# Commit introducing code formatting changes
a926bba49c89a5b882cd298be3af2570b1e6252c

Exécutez la commande suivante pour ignorer les révisions spécifiées.

git blame --ignore-revs-file .git-blame-ignore-revs filename

Exécutez la commande suivante pour demander à Git d'utiliser votre fichier ignore par défaut :

git config blame.ignoreRevsFile .git-blame-ignore-revs

Afficher les courriels des auteurs au lieu de leurs noms

Pour afficher l'adresse électronique de l'auteur au lieu de son nom :

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

Cela peut être utile pour contacter la personne responsable d'une modification spécifique.

Afficher les hachages complets des livraisons

Par défaut, git blame affiche les hachages courts des livraisons. Pour voir les hachages complets, exécutez :

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

Vous pouvez ajuster la longueur des abréviations de Git blame en utilisant l'option --abbrev=.

Utilisation de git blame dans Visual Studio Code

Pour les développeurs utilisant Visual Studio Code, l'extension Git Blame offre un support intégré pour git blame

Cette extension permet aux utilisateurs de :

  • Visualisez les annotations de blâme en ligne.
  • Survolez les lignes pour voir les détails de l'engagement.
  • Accédez à l'historique complet des fichiers et des lignes.

Meilleures pratiques Git Blame

Le maintien d'un fichier .git-blame-ignore-revs permet de s'assurer que les modifications de formatage n'encombrent pas l'historique des erreurs. Lorsque vous travaillez en équipe, il est utile que tout le monde suive les mêmes conventions pour ignorer les révisions.

Lorsque vous utilisez le site git blame, l'objectif doit toujours être de comprendre le raisonnement qui sous-tend les changements, et non d'attribuer des responsabilités. Il s'agit d'un outil d'apprentissage et d'amélioration de la collaboration, qui aide les développeurs à travailler plus efficacement ensemble.

Cycle de collaboration Git Blame

Conclusion 

Dans cet article, nous avons vu comment git blame peut aider les développeurs à suivre les modifications apportées à leur code. De l'utilisation de base aux fonctionnalités avancées, nous avons exploré comment cette commande permet de savoir qui a modifié un fichier et quand.

Vous pouvez optimiser cette commande en l'intégrant à d'autres outils Git, tels que git show et la configuration des révisions ignorées. Que vous déboguiez un problème, que vous examiniez des modifications ou que vous compreniez simplement l'historique d'un fichier, git blame offre des informations précieuses qui améliorent la maintenance du code et la collaboration.

La maîtrise d'outils tels que git blame vous permet de naviguer en toute confiance dans les bases de code, de collaborer plus efficacement et de conserver des historiques de projets plus clairs. Il ne s'agit pas seulement de savoir qui a modifié une ligne - mais pourquoi- et d'utiliser ces informations pour créer de meilleurs logiciels. Pour plonger plus profondément dans l'écosystème Git, consultez notre cours complet sur Git. ou plongez dans notre cours Git pour utilisateurs intermédiaires.

Git Blame FAQs

Comment ignorer les changements d'espacement dans git blame ?

Vous pouvez utiliser l'option -w pour ignorer les modifications qui ne concernent que l'espace blanc, telles que l'indentation ou l'espacement.

Comment trouver les détails du commit d'un changement spécifique dans git blame ?

Après avoir identifié un commit hash à partir de git blame, utilisez git show pour voir les détails du commit, y compris les changements effectués.

Comment exclure certains commits des résultats de git blame ?

Si vous souhaitez ignorer des livraisons spécifiques (par exemple, les changements de formatage du code), utilisez :

git blame --ignore-rev  

Pour plusieurs commits ignorés, stockez-les dans un fichier .git-blame-ignore-revs et exécutez :

git blame --ignore-revs-file .git-blame-ignore-revs 

Existe-t-il un moyen d'utiliser git blame dans Visual Studio Code ?

Oui, l'extension Git Blame dans VS Code fournit des annotations de blâme en ligne, l'historique des livraisons et des informations détaillées. Vous pouvez activer ou personnaliser les annotations de blâme par le biais de ses paramètres.

Sujets

Les meilleurs cours de DataCamp

Cours

Introduction to GitHub Concepts

2 hr
24.8K
Learn how to use GitHub's various features, navigate the interface and perform everyday collaborative tasks.
Afficher les détailsRight Arrow
Commencer le cours
Voir plusRight Arrow