CommunityRédaction et éditiongithub.com

Conventional Commits

Rédiger des messages de commit Git selon la spécification Conventional Commits. Utilisez ceci lorsque vous terminez une tâche, que le projet utilise semantic-release, commitizen ou git-cliff, que vous choisissez entre les types feat/fix/chore/docs, que vous indiquez des changements cassants ou que vous générez des changelogs à partir de l'historique des commits.

Qu'est-ce que Conventional Commits ?

Cette compétence guide l'agent IA pour rédiger des messages de commit Git conformément à la spécification Conventional Commits v1.0.0. Elle est essentielle pour maintenir un historique de commits structuré, permettant la génération automatique de changelogs et la gestion du versionnement sémantique. La compétence définit les types de commits obligatoires (`feat`, `fix`) qui impactent directement le versionnement sémantique (MINOR, PATCH, MAJOR), ainsi que les types recommandés de la convention Angular (`docs`, `refactor`, `test`, etc.) qui n'ont d'effet que s'ils incluent un changement cassant. Elle fournit des règles précises pour la structuration du message (type, portée optionnelle, description, corps, pied), l'indication des changements cassants, et des exemples complets. La compétence s'intègre avec des outils comme commitlint pour la validation, et est utilisée sur n'importe quelle plateforme de développement supportant Git et les outils de CI/CD.

Compatible avec~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Jamie-BitFlight/claude_skills/tree/main/plugins/conventional-commits/skills/conventional-commits

Installed? Explore more Rédaction et édition skills: steipete/notion, langchain-ai/langchain, bytedance/podcast-generation · View all 6 →

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Conventional Commits (Commits Conventionnels)

Composez des messages de commit suivant la spécification Conventional Commits v1.0.0 pour un historique structuré, la génération automatique de changelogs et le versionnement sémantique.

Quand Utiliser Cette Compétence

Utilisez cette compétence lorsque vous :

  • Créez des messages de commit Git pour des projets structurés
  • Validez le format des messages de commit par rapport à la spécification Conventional Commits
  • Configurez la validation des messages de commit avec commitlint
  • Mettez en place la génération de changelogs à partir de l'historique des commits
  • Implémentez l'automatisation du versionnement sémantique
  • Révisez des messages de commit pour la conformité à la spécification
  • Formez des équipes aux normes de messages de commit
  • Intégrez des outils comme semantic-release, commitizen ou git-cliff

Structure du Message

<type>[portée optionnelle] : <description>

[corps optionnel]

[pied de page optionnel]

Composants

ComposantRequisDescriptionExemple
typeOuiCatégorie du commitfeat, fix, docs
portéeNonSection de la base de code affectée(auth), (analyseur)
descriptionOuiRésumé court des changementsajouter l'authentification utilisateur
corpsNonExplication détailléePlusieurs paragraphes avec contexte
piedNonChangements cassants, référencesBREAKING CHANGE :, Refs : #123

Types de Commit

Types Requis (Impact SemVer)

Ces types sont imposés par la spécification Conventional Commits et affectent directement le versionnement sémantique :

flowchart LR
    Fix[fix: Correction de bug<br/>pour les utilisateurs] --> PatchVer[PATCH<br/>0.0.X]
    Feat[feat: Nouvelle fonctionnalité<br/>pour les utilisateurs] --> MinorVer[MINOR<br/>0.X.0]
    Breaking[Tout type avec<br/>BREAKING CHANGE ou !] --> MajorVer[MAJOR<br/>X.0.0]

    style PatchVer fill:#e1f5ff
    style MinorVer fill:#fff4e1
    style MajorVer fill:#ffe1e1
TypeDescriptionSemVerExemple
featNouvelle fonctionnalité pour l'utilisateurMINOR (0.X.0)feat: ajouter l'authentification utilisateur
fixCorrection de bug pour l'utilisateurPATCH (0.0.X)fix: empêcher le crash sur entrée vide

Types Recommandés (Convention Angular)

Ces types proviennent de @commitlint/config-conventional basé sur les directives de commit Angular. Ils n'ont pas d'effet SemVer implicite sauf s'ils incluent BREAKING CHANGE.

TypeDescriptionExemple
buildModifications du système de build ou dépendances externesbuild: mise à jour de webpack vers v5
ciModifications de la configuration CIci: ajouter Node 18 à la matrice de test
docsModifications de documentation uniquementdocs: mise à jour de la référence API
perfAmélioration des performancesperf: réduire la taille du bundle de 20%
refactorModification de code sans correction de bug ni fonctionnalitérefactor: extraire la logique de validation
styleModifications de style de code (espaces, formatage)style: corriger l'indentation
testAjout ou correction de teststest: ajouter des tests unitaires pour l'analyseur

Types Supplémentaires Courants

TypeDescriptionExemple
choreModifications ne touchant ni src ni les testschore: mettre à jour .gitignore
revertAnnule un commit précédentrevert: feat: ajouter auth user

Remarque : Les équipes peuvent définir des types personnalisés au-delà de feat et fix, mais les types de la convention Angular sont largement supportés par les outils.

Règles de la Spécification

Les règles suivante constituent la spécification officielle Conventional Commits 1.0.0 selon la RFC 2119.

Type et Portée

  1. Les commits DOIVENT être préfixés par un type, composé d'un nom (feat, fix, etc.), suivi OPTIONNELLEMENT d'une portée, OPTIONNELLEMENT de !, et du deux-points et de l'espace OBLIGATOIRES en terminal.

  2. Le type feat DOIT être utilisé lorsqu'un commit ajoute une nouvelle fonctionnalité.

  3. Le type fix DOIT être utilisé lorsqu'un commit représente une correction de bug.

  4. Une portée PEUT être fournie après un type. Une portée DOIT consister en un nom décrivant une section de la base de code, entouré de parenthèses, par exemple fix(analyseur) :.

  5. Une description DOIT suivre immédiatement les deux-points et l'espace après le préfixe type/portée. La description est un résumé court des modifications du code, par exemple fix: problème d'analyse de tableau lorsque plusieurs espaces étaient contenus dans la chaîne.

Corps

  1. Un corps de commit plus long PEUT être fourni après la description courte, apportant des informations contextuelles supplémentaires. Le corps DOIT commencer par une ligne vide après la description.

  2. Un corps de commit est libre et PEUT consister en un nombre quelconque de paragraphes séparés par des nouvelles lignes.

Pied de Page

  1. Un ou plusieurs pieds de page PEUVENT être fournis une ligne vide après le corps. Chaque pied DOIT consister en un jeton mot, suivi soit d'un séparateur :<space>, soit <space>#, suivi d'une valeur de chaîne (inspiré par la convention de queue git).

  2. Le jeton d'un pied DOIT utiliser - à la place des caractères d'espace, par exemple Acked-by (cela aide à différencier la section de pied du corps en plusieurs paragraphes). Exception : BREAKING CHANGE PEUT également être utilisé comme jeton.

  3. La valeur d'un pied PEUT contenir des espaces et des nouvelles lignes. L'analyse DOIT se terminer lorsque la paire jeton/séparateur valide suivante est observée.

Changements Cassants

  1. Les changements cassants DOIVENT être indiqués dans le préfixe type/portée d'un commit, ou comme entrée dans le pied de page.

  2. S'il est inclus comme pied, un changement cassant DOIT consister en le texte en majuscules BREAKING CHANGE, suivi de deux-points, d'un espace et d'une description, par exemple BREAKING CHANGE: les variables d'environnement ont désormais priorité sur les fichiers de configuration.

  3. S'il est inclus dans le préfixe type/portée, les changements cassant DOIVENT être indiqués par ! immédiatement avant :. Si ! est utilisé, BREAKING CHANGE: PEUT être omis du pied, et la description du commit DOIT être utilisée pour décrire le changement cassant.

Règles Supplémentaires

  1. Des types autres que feat et fix PEUVENT être utilisés dans les messages de commit, par exemple docs: mettre à jour les références de doc.

  2. Les unités d'information qui composent Conventional Commits NE DOIVENT PAS être traitées comme sensibles à la casse par les implémenteurs, sauf BREAKING CHANGE qui DOIT être en majuscules.

  3. BREAKING-CHANGE DOIT être synonyme de BREAKING CHANGE lorsqu'il est utilisé comme jeton dans un pied de page.

Meilleures Pratiques pour la Description

Basées sur les directives de message de commit Angular :

Directives pour le Résumé/Description

  • Utilisez l'impératif présent : "ajoute" et non "ajouté" ou "modifications"
  • Ne mettez pas de majuscule à la première lettre
  • Pas de point (.) à la fin
  • Gardez l'en-tête entier (type + portée + description) sous 72 caractères

Bons Exemples

feat: ajouter validation pour entrée email
fix: gérer le pointeur nul dans le service utilisateur
docs: mettre à jour les instructions d'installation
refactor: simplifier le flux d'authentification

Mauvais Exemples (À Éviter)

feat: Ajout validation pour entrée email     # Passé
fix: Gère le pointeur nul dans le service utilisateur  # Troisième personne
docs: Mettre à jour instructions d'installation.  # Point à la fin, majuscule
FEAT: ajouter validation                       # Type en majuscule (incohérent)

Directives pour le Corps

  • Utilisez l'impératif présent (comme pour le résumé)
  • Expliquez la motivation du changement
  • Incluez une comparaison du comportement précédent et nouveau si utile
  • Le corps DOIT commencer par une ligne vide après la description
  • Minimum recommandé : 20 caractères lorsque le corps est présent

Changements Cassants

Méthodes pour Indiquer des Changements Cassants

Trois approches équivalentes :

  1. Notation en pied de page :

    feat: permettre à l'objet de configuration fourni d'étendre d'autres configurations
    
    BREAKING CHANGE: la clé `extends` dans le fichier de configuration est maintenant utilisée pour étendre d'autres fichiers de configuration
    
  2. Suffixe de type avec ! :

    feat!: supprimer le support pour Node 6
    
  3. Suffixe type+portée avec ! :

    feat(api)!: envoyer un email au client lorsqu'un produit est expédié
    

Règles

  • BREAKING CHANGE DOIT être en majuscules
  • BREAKING-CHANGE est synonyme lorsqu'il est utilisé comme jeton de pied
  • Les changements cassants DOIVENT correspondre à un incrément de version MAJEUR en SemVer

Corrélation avec le Versionnement Sémantique

flowchart TD
    Start([Analyser les Commits]) --> CheckBreaking{Un commit contient-il<br/>BREAKING CHANGE<br/>ou !?}
    CheckBreaking -->|Oui| Major[Majeur<br/>X.0.0]
    CheckBreaking -->|Non| CheckFeat{Un commit<br/>est-il feat?}
    CheckFeat -->|Oui| Minor[Mineur<br/>0.X.0]
    CheckFeat -->|Non| CheckFix{Un commit<br/>est-il fix?}
    CheckFix -->|Oui| Patch[Correctif<br/>0.0.X]
    CheckFix -->|Non| NoChange[Aucune modification de version]

    Major --> End([Versionner])
    Minor --> End
    Patch --> End
    NoChange --> End

Correspondance Type de Commit à Version

Type de CommitIncrément de Version
fixCORRECTIF (0.0.X)
featMINEUR (0.X.0)
BREAKING CHANGE ou !MAJEUR (X.0.0)

Raison : Permet un versionnement sémantique automatisé basé sur l'historique des commits.

Modèles de Validation

Expression Régulière pour l'En-tête

^(feat|fix|docs|style|refactor|perf|test|build|ci|chore|revert)(\(.+\))?!?:\s.+$

Exemple de Validation en Python

import re

CONVENTIONAL_COMMIT_PATTERN = re.compile(
    r"^(?P<type>feat|fix|docs|style|refactor|perf|test|build|ci|chore|revert)"
    r"(?:\((?P<scope>[^)]+)\))?"
    r"(?P<breaking>!)?"
    r":\s"
    r"(?P<description>.+)$"
)


def validate_header(header: str) -> bool:
    """Valider que l'en-tête de commit suit Conventional Commits."""
    return bool(CONVENTIONAL_COMMIT_PATTERN.match(header))


def parse_header(header: str) -> dict | None:
    """Analyser l'en-tête de commit en composants."""
    match = CONVENTIONAL_COMMIT_PATTERN.match(header)
    if not match:
        return None
    return {
        "type": match.group("type"),
        "scope": match.group("scope"),
        "breaking": bool(match.group("breaking")),
        "description": match.group("description"),
    }

Exemples Complets

Commits Simples

feat: ajouter l'authentification utilisateur
fix: empêcher le crash sur entrée vide
docs: corriger l'orthographe de CHANGELOG

Commits avec Portée

feat(lang): ajouter la langue polonaise
feat(analyseur): ajouter la capacité d'analyser des tableaux
fix(auth): gérer correctement l'expiration du jeton

Changements Cassants

feat: permettre à l'objet de configuration fourni d'étendre d'autres configurations

BREAKING CHANGE: la clé `extends` dans le fichier de configuration est maintenant utilisée pour étendre d'autres fichiers de configuration
feat!: envoyer un email au client lorsqu'un produit est expédié
feat(api)!: envoyer un email au client lorsqu'un produit est expédié
chore!: abandonner le support pour Node 6

BREAKING CHANGE: utiliser des fonctionnalités JavaScript non disponibles dans Node 6.

Corps Multi-Paragraphes avec Pieds de Page

fix: empêcher la concurrence des requêtes

Introduire un identifiant de requête et une référence à la dernière requête. Ignorer
les réponses entrantes autres que celles de la dernière requête.

Supprimer les timeouts qui étaient utilisés pour atténuer le problème de concurrence mais sont
désormais obsolètes.

Reviewé par : Z
Refs : #123

Commit d'Annulation

revert: ne parlons plus jamais de l'incident des nouilles

Refs : 676104e, a215868

Amélioration des Performances

perf: réduire l'allocation mémoire dans l'analyseur de 40%

Remplacer la concaténation de chaînes par le pattern StringBuilder.
Les résultats de benchmark montrent une réduction de 40% des allocations en tas.

Refs : #456

Refactorisation

refactor: extraire la logique d'authentification dans un module séparé

Déplacer les fonctions liées à l'authentification de utils.py vers auth.py.
Aucun changement fonctionnel.

Modifications Build/CI

ci: ajouter Node 18 à la matrice de test
build: mettre à jour webpack de v4 à v5

- Mettre à jour webpack.config.js pour la compatibilité v5
- Remplacer les plugins obsolètes
- Mettre à jour toutes les dépendances des loaders

Refs : #789

Modifications de Test et de Style

test: ajouter des tests unitaires pour la validation utilisateur

Couvrir les cas limites pour la validation des emails et la force des mots de passe.
style: formater le code selon la configuration prettier
chore: mettre à jour .gitignore pour exclure les fichiers IDE

Intégration avec les Outils de Validation

Configuration commitlint

Validez les commits avec commitlint en utilisant la configuration Angular :

# Installer commitlint
npm install --save-dev @commitlint/cli @commitlint/config-conventional

# Créer la configuration
echo "module.exports = {extends: ['@commitlint/config-conventional']}" > commitlint.config.js

# Tester un message de commit
echo 'feat(api): ajouter un nouveau point de terminaison' | npx commitlint

Pour des conseils complets sur la configuration de commitlint, référez-vous aux conseils de ce document. Si votre espace de travail dispose d'un plugin commitlint installé, vous pouvez vous y référer pour des règles et exemples spécifiques au projet.

Hooks Pre-commit

Appliquez le format des messages de commit avec des hooks pre-commit. Si votre espace de travail dispose d'un plugin pre-commit installé, vous pouvez l'utiliser pour des conseils de configuration de hook ; sinon, configurez les hooks directement.

Génération de Changelog

Générez des changelogs à partir de commits conventionnels en utilisant semantic-release :

// release.config.js
module.exports = {
  branches: ['main'],
  plugins: [
    '@semantic-release/commit-analyzer',
    '@semantic-release/release-notes-generator',
    '@semantic-release/changelog',
    '@semantic-release/github',
  ],
};
// .releaserc.json
{
  "branches": ["main"],
  "plugins": [
    "@semantic-release/commit-analyzer",
    "@semantic-release/release-notes-generator",
    "@semantic-release/changelog",
    "@semantic-release/npm",
    "@semantic-release/github"
  ]
}

Pour des exemples de messages de commit supplémentaires pour vos cas d'utilisation spécifiques, référez-vous aux directives de ce document.

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

Jamie-BitFlight/agentskill-kaizen-meta-docs

Agentskill kaizen plugin documentation index. Load when needing to read about cross-platform notes, improvement plans, or DuckDB integration.

Jamie-BitFlight/bash-51-features

Bash 5.1 release features and improvements with practical examples. Use when working with Bash 5.1 features, epoch time variables, redirection enhancements, or when user asks about Bash 5.1 changes, new features, or version-specific capabilities.

Jamie-BitFlight/bash-52-features

Bash 5.2 release features and improvements with practical examples. Use when working with Bash 5.2 features, variable handling enhancements, readline improvements, or when user asks about Bash 5.2 changes, new features, or version-specific capabilities.

Jamie-BitFlight/bash-53-features

Bash 5.3 release features and improvements with practical examples. Use when working with Bash 5.3 features, new command substitution, GLOBSORT, loadable builtins, or when user asks about Bash 5.3 changes, new features, or version-specific capabilities.

Jamie-BitFlight/bash-development

This skill should be used when the user asks to "write a bash script", "create a shell script", "implement bash function", "parse arguments in bash", "handle errors in bash", or mentions bash development, shell scripting, script templates, or modern bash patterns.

Jamie-BitFlight/bash-lint

This skill should be used when the user asks to "lint bash script", "run shellcheck", "format shell script", "use shfmt", "fix shellcheck errors", or mentions shell script linting, formatting, code quality, or pre-commit hooks for bash.

Jamie-BitFlight/bash-logging

This skill should be used when the user asks to "add logging to bash script", "colorize output", "implement log levels", "CI/CD sections", "terminal colors in bash", or mentions logging functions, emoji output, collapsible CI sections, or shlocksmith.

Jamie-BitFlight/bash-portability

This skill should be used when the user asks about "POSIX compatibility", "portable shell scripts", "cross-shell compatibility", "bashisms", "shebang selection", or mentions writing scripts that work on different shells (bash, sh, dash, zsh) or different systems.

Jamie-BitFlight/bash-testing

This skill should be used when the user asks to "test bash script", "write shell tests", "use shunit2", "use shellspec", "create test suite for bash", or mentions unit testing, test frameworks, mocking, or test-driven development for shell scripts.

Jamie-BitFlight/brainstorming-skill

You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or when users request help with ideation, marketing, and strategic planning. Explores user intent, requirements, and design before implementation using research-validated prompt patterns.

Jamie-BitFlight/clang-format

Configure clang-format code formatting. Use when: user mentions clang-format or .clang-format, analyzing code style/patterns, creating/modifying formatting config, troubleshooting formatting, brace styles/indentation/spacing/alignment/pointer alignment, or codifying conventions.

Jamie-BitFlight/commitlint

When setting up commit message validation for a project. When project has commitlint.config.js or .commitlintrc files. When configuring CI/CD to enforce commit format. When extracting commit rules for LLM prompt generation. When debugging commit message rejection errors.

Jamie-BitFlight/dasel-reference

Use when querying, modifying, or converting JSON, YAML, TOML, XML, CSV, HCL, or INI with dasel v3. Complete reference for selectors, functions, conditionals, variables, spread operator, type casting, and format-specific patterns.

Jamie-BitFlight/data-exploration

Use when exploring unknown structured data files with dasel v3 — discover schema, list keys, find nested values, sample arrays, identify data types across JSON, YAML, TOML, XML, CSV, HCL, INI formats

Jamie-BitFlight/data-transformation

Use when modifying, converting, or transforming structured data with dasel v3 — in-place mutations, format conversion, batch operations, array manipulation, object construction, and merge patterns across JSON, YAML, TOML, XML, CSV, HCL, INI

Jamie-BitFlight/delegate

Decompose substantive work into phases, dispatch each phase to a sub-agent, and adjudicate what comes back. Use whenever a request asks for implementation, investigation, a fix, a review, or any change to files — including small ones — and whenever you are about to read source or run a diagnostic yourself instead of handing it off. Also use when a report from a sub-agent needs judging, when a phase needs re-dispatching, or when a user names one instance of a pattern. Does not apply when your own prompt begins "Your ROLE_TYPE is sub-agent." — then follow references/sub-agent-contract.md instead.

Jamie-BitFlight/enterprise-hibernate-hbm

Dasel v3 query patterns for Hibernate .hbm.xml mapping files — entity-table binding, Java property-to-column extraction, one-to-many set/list/bag relationship tracing, many-to-one foreign key discovery, batch scanning across 60+ HBM files. Use when querying Hibernate ORM class mappings, extracting schema metadata from Java persistence layer, or auditing entity-column relationships in enterprise legacy codebases.

Jamie-BitFlight/enterprise-installanywhere

Dasel v3 query patterns for InstallAnywhere .iap_xml installer definitions — use when querying action sequences, discovering variables, resolving platform conditions, navigating panels, or comparing installer variants. Files are 2.5+ MB, 65,000+ lines — too large for context reads, requires structural dasel queries.

Jamie-BitFlight/enterprise-maven-pom

Dasel v3 selector patterns for Maven POM XML files — use when querying dependency versions, filtering by groupId or scope, extracting module hierarchy from parent POMs, or detecting version conflicts across enterprise multi-module Java projects. Load this skill when working with pom.xml files using dasel.

Jamie-BitFlight/enterprise-spring-xml

Dasel v3 selectors for Spring bean factory XML — use when querying any Spring ApplicationContext XML for bean discovery, dependency wiring, JMS destination mapping, property injection extraction, or cross-bean reference tracing. Load this skill before writing dasel selectors against Spring bean XML files (applicationContext.xml, *_beans.xml, spring-*.xml).

Skills associés