Files
gh-wasabeef-claude-code-coo…/commands/commit-message.md
2025-11-30 09:05:34 +08:00

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 pbcopy dans un processus séparé de la sortie du message
  • Utiliser printf au lieu de echo pour é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.js
  • commitlint.config.mjs
  • commitlint.config.cjs
  • commitlint.config.ts
  • .commitlintrc.js
  • .commitlintrc.json
  • .commitlintrc.yml
  • .commitlintrc.yaml
  • package.json avec section commitlint
# 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 :

  1. Configuration CommitLint paramètres de langue
  2. Analyse git log détection automatique
  3. Fichier de projet paramètres de langue
  4. 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 externes
  • chore : Autres changements (aucun impact sur la version)
  • ci : Changements des fichiers de configuration et scripts CI
  • docs : Changements de documentation uniquement
  • style : 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és
  • perf : Améliorations de performances
  • test : 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

  1. Analyse : Analyser le contenu de git diff --staged
  2. Génération : Générer un message de commit approprié
  3. 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és
  • git diff --staged - Contenu réel des changements
  • git 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

  1. Correspondre au projet : Suivre la langue de commit existante
  2. Concision : Clair en moins de 50 caractères
  3. Cohérence : Ne pas mélanger les langues (rester cohérent en français)
  4. OSS : Anglais recommandé pour l'open source
  5. 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 add au 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