Améliorer vos messages de commit avec Conventional Commits

Git
4 minutes de lecture

« Il n’y a que deux choses vraiment difficiles en informatique : l’invalidation du cache et le nommage. » – Phil Karlton. Et les messages de commit n’échappent pas à cette règle. « Fix », « up », « wip »… On a tous déjà laissé passer ce genre de messages dans nos commits. Sur le moment, ça paraît anodin, mais dès qu’il faut remonter dans l’historique Git, ça devient un vrai casse-tête. Les Conventional Commits proposent justement une convention simple et standardisée pour donner du sens à vos commits.

Conventional Commits

Conventional Commits est une convention légère appliquée aux messages de commit. Elle fournit un ensemble de règles simples pour créer un historique explicite, lisible et structuré, facilitant ainsi la compréhension du projet.

Structure d'un message

Selon la documentation, un message de commit doit être structuré comme ci-dessous :

      <type>[optional scope]: <description>

[optional body]

[optional footer(s)]
    

Un message structuré selon la convention ci-dessus se compose de trois parties :

Le header

Le header est la partie essentielle de votre message et contient :

  • type : nature du changement (obligatoire)
  • scope : contexte ou partie du projet impactée (optionnel)
  • description : résumé concis du commit (obligatoire)

Exemple :

feat(api): add authentication
Les types de commit les plus courants

Dans une configuration classique, on va retrouver les types suivants :

  • feat : ajout d'une nouvelle fonctionnalité
  • fix : correction d'un bug
  • docs : changement dans la documentation
  • style : changement qui n’affecte pas le fonctionnement du code (espace, indentation, point-virgule...), à ne pas confondre avec les changements de style CSS
  • refactor : refactoring de code sans ajout de fonctionnalité ni correction de bug
  • perf : changement lié à l'amélioration de performance
  • test : ajout ou mise à jour de tests unitaires
  • build : concerne le système de compilation ou les dépendances externes
  • ci : concerne les fichiers d'intégration continue (CI)
  • chore : autre changement qui ne concerne pas le code source ou test
  • revert : retour à un commit précédent

Le body (optionnel)

Le body permet d'apporter une description plus détaillée.

Exemple :

      fix(utils): correct time zone in formatDate utility function

The formatDate utility function was incorrectly handling time zones, which caused dates to be displayed in the wrong local time.  
This fix ensures that the function correctly accounts for the specified time zone, providing consistent and accurate date formatting across the application.
    

Le footer sert à indiquer des modifications importantes ou des références à des tickets/bugs.

Exemple :

      build(app)!: update nuxt dependency

BREAKING CHANGE: Nuxt has been upgraded from version 3.0.0 to 4.0.0.
Reviewed-by: Orphée
Refs: #123
    

Pourquoi utiliser cette convention ?

Utiliser cette convention ne revient pas seulement à écrire des messages plus propres. Cela apporte des bénéfices concrets au quotidien.

Clarté de l’historique Git

Avec des messages explicites, l’historique devient facile à lire et à comprendre. Plus besoin de deviner ce que cache un « fix » ou un « update ».

Automatisation dans vos workflows CI/CD

Les Conventional Commits ne se contentent pas de clarifier vos messages de commit : ils permettent également d’automatiser de nombreuses étapes dans vos pipelines CI/CD.

Cohérence dans le projet

Tout le monde suit la même règle. Résultat : des messages uniformes, une meilleure qualité et un historique plus agréable à parcourir.

Meilleure collaboration en équipe

Des messages clairs facilitent la compréhension des changements et rendent les revues de code plus efficaces. La communication entre développeurs gagne alors en fluidité.

Débogage simplifié

Identifier l’origine d’un bug ou comprendre une modification est beaucoup plus rapide quand chaque commit décrit exactement ce qu’il change.

Maintenabilité à long terme

Un historique bien structuré est un vrai atout lorsque le projet grandit, change d’équipe ou s’ouvre à la communauté.

Comment l’adopter et l'imposer dans un projet ?

De nombreux outils permettent d’adopter la convention et de l’appliquer facilement dans un projet. Selon votre expérience et vos besoins, vous pouvez commencer avec des assistants guidés ou passer à une intégration plus stricte directement dans vos workflows.

Commitizen

Commitizen propose une interface interactive en ligne de commande. Au moment de créer un commit, l’outil vous guide pas à pas pour remplir les différents champs (cf. capture ci-dessous). Impossible de se tromper, même pour les débutants.

Démo Commitizen

Extensions VS Code

Si vous travaillez avec VS Code, plusieurs extensions permettent d’intégrer cette convention directement dans l’IDE. L’une des plus populaires est Conventional Commits, qui vous assiste lors de la rédaction et vous aide à rester cohérent sans effort.

Démo de l'extension VS Code Conventional Commits

Outils de linting automatique

Lorsque vous ou votre équipe êtes prêts à appliquer la convention de façon plus stricte, des outils comme commitlint couplé avec Husky deviennent indispensables. Ils vérifient automatiquement vos messages au moment du commit et bloquent ceux qui ne respectent pas la configuration définie. C’est une manière efficace d’assurer la cohérence sur tout le projet.

Démo erreur de message de commit grâce à commitlint et Husky

Automatisation avec la CI/CD

Les Conventional Commits ne servent pas seulement à clarifier l’historique Git : ils peuvent aussi devenir un levier puissant pour automatiser vos workflows CI/CD.

Avec des commits structurés, il est possible de :

  • Gérer automatiquement les versions et la génération des changelogs : des outils comme standard-version ou semantic-release peuvent déterminer la version à publier selon la nature des commits (feat, fix, ...) et générer un changelog précis sans intervention manuelle.
  • Appliquer le versioning sémantique : couplés à SemVer, vos messages de commit définissent si une mise à jour est majeure, mineure ou un simple correctif, garantissant un versioning cohérent et fiable.
  • Déclencher des pipelines et des déploiements : avec GitHub Actions ou d’autres CI/CD, les messages peuvent être utilisés pour lancer automatiquement certaines étapes, comme un déploiement après un commit feat ou fix par exemple.

Cette approche transforme vos commits en véritables moteurs d’automatisation, rendant vos releases plus fiables et votre workflow beaucoup plus efficace.

Conclusion

Adopter cette convention n'est pas qu’une simple question de style : les Conventional Commits apportent clarté, cohérence et maintenabilité à vos projets. En structurant vos messages de commit, vous facilitez la compréhension globale du projet, améliorez la coordination au sein de l’équipe et posez des bases solides pour l’évolution future du projet.

Qu'attendez-vous pour l'adopter ?