9.8 KiB
Message de commit
Génère des messages de commit à partir des modifications indexées (git diff --staged). Cette commande ne fait que créer des messages et les copie dans votre presse-papiers—elle n'exécute aucune commande git.
Usage
/commit-message [options]
Options
--format <format>: Choisir le format du message (conventional, gitmoji, angular)--lang <language>: Définir la langue explicitement (en, fr)--breaking: Inclure la détection de changements cassants
Exemples de base
# Générer un message à partir des modifications indexées (langue auto-détectée)
# La suggestion principale est automatiquement copiée dans votre presse-papiers
/commit-message
# Spécifier la langue explicitement
/commit-message --lang fr
/commit-message --lang en
# Inclure la détection de changements cassants
/commit-message --breaking
Prérequis
Important : Cette commande ne fonctionne qu'avec les modifications indexées. Exécutez d'abord git add pour indexer vos modifications.
# Si rien n'est indexé, vous verrez :
$ /commit-message
Aucune modification indexée trouvée. Veuillez d'abord exécuter git add.
Fonctionnalité de presse-papiers automatique
La suggestion principale est copiée dans votre presse-papiers comme commande complète : git commit -m "message". Il suffit de la coller et l'exécuter dans votre terminal.
Notes d'implémentation :
- Exécuter
pbcopydans un processus séparé de la sortie du message - Utiliser
printfau lieu deechopour éviter les sauts de ligne indésirables
Détection automatique des conventions de projet
Important : Si des conventions spécifiques au projet existent, elles ont la priorité.
1. Vérification de la configuration CommitLint
Détecte automatiquement les paramètres des fichiers suivants :
commitlint.config.jscommitlint.config.mjscommitlint.config.cjscommitlint.config.ts.commitlintrc.js.commitlintrc.json.commitlintrc.yml.commitlintrc.yamlpackage.jsonavec sectioncommitlint
# Rechercher les fichiers de configuration
find . -name "commitlint.config.*" -o -name ".commitlintrc.*" | head -1
2. Détection de types personnalisés
Exemple de types spécifiques au projet :
// commitlint.config.mjs
export default {
extends: ["@commitlint/config-conventional"],
rules: {
"type-enum": [
2,
"always",
[
"feat",
"fix",
"docs",
"style",
"refactor",
"test",
"chore",
"wip", // travail en cours
"hotfix", // correction urgente
"release", // version
"deps", // mise à jour de dépendance
"config", // changement de configuration
],
],
},
};
3. Détection des paramètres de langue
// Quand le projet utilise des messages français
export default {
rules: {
"subject-case": [0], // Désactivé pour le support français
"subject-max-length": [2, "always", 72], // Limite de caractères ajustée pour le français
},
};
4. Analyse de l'historique des commits existants
# Apprendre les modèles des commits récents
git log --oneline -50 --pretty=format:"%s"
# Statistiques d'utilisation des types
git log --oneline -100 --pretty=format:"%s" | \
grep -oE '^[a-z]+(\([^)]+\))?' | \
sort | uniq -c | sort -nr
Détection automatique de la langue
Bascule automatiquement entre français/anglais basé sur :
- Configuration CommitLint paramètres de langue
- Analyse git log détection automatique
- Fichier de projet paramètres de langue
- Fichier modifié analyse des commentaires et chaînes
Par défaut c'est l'anglais. Génère en français si détecté comme projet français.
Format de message
Commits conventionnels (Par défaut)
<type>: <description>
Important : Génère toujours des messages de commit sur une seule ligne. Ne génère pas de messages multi-lignes.
Note : Les conventions spécifiques au projet ont la priorité si elles existent.
Types standards
Types requis :
feat: Nouvelle fonctionnalité (ajout de fonctionnalité visible pour l'utilisateur)fix: Correction de bug
Types optionnels :
build: Changements du système de build ou dépendances externeschore: Autres changements (aucun impact sur la version)ci: Changements des fichiers de configuration et scripts CIdocs: Changements de documentation uniquementstyle: Changements qui n'affectent pas la signification du code (espaces, formatage, points-virgules, etc.)refactor: Changements de code sans corrections de bugs ni ajouts de fonctionnalitésperf: Améliorations de performancestest: Ajout ou correction de tests
Exemple de sortie (Projet anglais)
$ /commit-message
📝 Suggestions de message de commit
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✨ Candidat principal :
feat: implement JWT-based authentication system
📋 Alternatives :
1. feat: add user authentication with JWT tokens
2. fix: resolve token validation error in auth middleware
3. refactor: extract auth logic into separate module
✅ `git commit -m "feat: implement JWT-based authentication system"` copié dans le presse-papiers
Exemple d'implémentation (Corrigé) :
# Copier d'abord la commande commit dans le presse-papiers (pas de saut de ligne)
printf 'git commit -m "%s"' "$COMMIT_MESSAGE" | pbcopy
# Puis afficher le message
cat << EOF
📝 Suggestions de message de commit
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✨ Candidat principal :
$COMMIT_MESSAGE
📋 Alternatives :
1. ...
2. ...
3. ...
✅ \`git commit -m "$COMMIT_MESSAGE"\` copié dans le presse-papiers
EOF
Exemple de sortie (Projet français)
$ /commit-message
📝 Suggestions de message de commit
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✨ Candidat principal :
feat: système d'authentification JWT implémenté
📋 Alternatives :
1. feat: ajouter authentification utilisateur avec tokens JWT
2. fix: résoudre erreur de validation de token dans middleware auth
3. docs: séparer logique auth dans module différent
✅ `git commit -m "feat: système d'authentification JWT implémenté"` copié dans le presse-papiers
Vue d'ensemble du fonctionnement
- Analyse : Analyser le contenu de
git diff --staged - Génération : Générer un message de commit approprié
- Copie : Copier automatiquement le candidat principal dans le presse-papiers
Note : Cette commande n'exécute pas git add ou git commit. Elle ne fait que générer des messages de commit et les copie dans le presse-papiers.
Fonctionnalités intelligentes
1. Classification automatique des changements (Fichiers indexés uniquement)
- Ajout de nouveau fichier →
feat - Modèles de correction d'erreur →
fix - Fichiers de test uniquement →
test - Changements de fichiers de configuration →
chore - Mises à jour README/docs →
docs
2. Détection automatique des conventions de projet
- Fichier
.gitmessage - Conventions dans
CONTRIBUTING.md - Modèles d'historique de commits passés
3. Détails de détection de langue (Modifications indexées uniquement)
# Critères de détection (ordre de priorité)
1. Détecter la langue à partir du contenu git diff --staged
2. Analyse des commentaires des fichiers indexés
3. Analyse de langue de git log --oneline -20
4. Paramètres de langue principale du projet
4. Détails de l'analyse d'indexation
Informations utilisées pour l'analyse (lecture seule) :
git diff --staged --name-only- Liste des fichiers modifiésgit diff --staged- Contenu réel des changementsgit status --porcelain- Statut des fichiers
Détection de changements cassants
Pour les changements d'API cassants :
Français :
feat!: changer format de réponse API utilisateur
BREAKING CHANGE: la réponse utilisateur inclut maintenant des métadonnées supplémentaires
Ou :
feat(api)!: changer flux d'authentification
Anglais :
feat!: change user API response format
BREAKING CHANGE: user response now includes additional metadata
Ou :
feat(api)!: change authentication flow
Meilleures pratiques
- Correspondre au projet : Suivre la langue de commit existante
- Concision : Clair en moins de 50 caractères
- Cohérence : Ne pas mélanger les langues (rester cohérent en français)
- OSS : Anglais recommandé pour l'open source
- Ligne unique : Toujours message de commit sur une ligne (compléter avec PR pour explications détaillées)
Modèles communs
Français :
feat: ajouter endpoint d'inscription utilisateur
fix: résoudre fuite mémoire dans gestionnaire cache
docs: mettre à jour documentation API
Anglais :
feat: add user registration endpoint
fix: resolve memory leak in cache manager
docs: update API documentation
Intégration avec Claude
# Utiliser avec les modifications indexées
git add -p # Indexation interactive
/commit-message
"Générer message de commit optimal"
# Indexer et analyser des fichiers spécifiques
git add src/auth/*.js
/commit-message --lang fr
"Générer message pour changements d'authentification"
# Détection et gestion de changement cassant
git add -A
/commit-message --breaking
"Marquer appropriément s'il y a des changements cassants"
Notes importantes
- Prérequis : Les modifications doivent être indexées avec
git addau préalable - Limitation : Les modifications non indexées ne sont pas analysées
- Recommandation : Vérifier d'abord les conventions de commit du projet existant