---
name: wasabeef/générer-des-messages-de-commit
source: https://app.decimal.ai/s/wasabeef-ge-ne-rer-des-messages-de-commit@1/SKILL.md
source_sha256: 8ff0816770bd
---

# Générer des messages 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

```bash
/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

```bash
# 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.

```bash
# 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`

```bash
# 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 :

```javascript
// 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

```javascript
// 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

```bash
# 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)

```text
<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)

```bash
$ /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é)** :

```bash
# 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)

```bash
$ /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)

```bash
# 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** :

```bash
feat!: changer format de réponse API utilisateur

BREAKING CHANGE: la réponse utilisateur inclut maintenant des métadonnées supplémentaires
```

Ou :

```bash
feat(api)!: changer flux d'authentification
```

**Anglais** :

```bash
feat!: change user API response format

BREAKING CHANGE: user response now includes additional metadata
```

Ou :

```bash
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** :

```text
feat: ajouter endpoint d'inscription utilisateur
fix: résoudre fuite mémoire dans gestionnaire cache
docs: mettre à jour documentation API
```

**Anglais** :

```text
feat: add user registration endpoint
fix: resolve memory leak in cache manager
docs: update API documentation
```

## Intégration avec Claude

```bash
# 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