From cook-fr
Splits large changes into semantically meaningful small commits with appropriate messages. Activates on 'commit' or 'diviser et commiter'.
How this skill is triggered — by the user, by Claude, or both
Slash command
/cook-fr:semantic-commitThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Divise les gros changements en petits commits significatifs avec des messages appropriés. Utilise uniquement des commandes git standard.
Divise les gros changements en petits commits significatifs avec des messages appropriés. Utilise uniquement des commandes git standard.
/semantic-commit [options]
--dry-run : Afficher les divisions de commits proposées sans réellement committer--lang <langue> : Forcer la langue pour les messages de commit (en, fr)--max-commits <nombre> : Spécifier le nombre maximum de commits (défaut : 10)# Analyser les changements actuels et committer en unités logiques
/semantic-commit
# Vérifier uniquement la proposition de division (pas de commit réel)
/semantic-commit --dry-run
# Générer les messages de commit en anglais
/semantic-commit --lang en
# Générer les messages de commit en français
/semantic-commit --lang fr
# Diviser en maximum 5 commits
/semantic-commit --max-commits 5
git diff HEADNous divisons quand nous voyons :
# Analyser l'échelle du changement
CHANGED_FILES=$(git diff HEAD --name-only | wc -l)
CHANGED_LINES=$(git diff HEAD --stat | tail -1 | grep -o '[0-9]\+ insertions\|[0-9]\+ deletions' | awk '{sum+=$1} END {print sum}')
if [ $CHANGED_FILES -ge 5 ] || [ $CHANGED_LINES -ge 100 ]; then
echo "Changement important détecté : division recommandée"
fi
# Identifier les unités fonctionnelles à partir de la structure des répertoires
git diff HEAD --name-only | cut -d'/' -f1-2 | sort | uniq
# → src/auth, src/api, components/ui, etc.
# Nouveaux fichiers vs modifications de fichiers existants
git diff HEAD --name-status | grep '^A' # Nouveaux fichiers
git diff HEAD --name-status | grep '^M' # Fichiers modifiés
git diff HEAD --name-status | grep '^D' # Fichiers supprimés
# Détecter les changements de relations d'import
git diff HEAD | grep -E '^[+-].*import|^[+-].*require' | \
cut -d' ' -f2- | sort | uniq
# Obtenir la liste des fichiers modifiés
git diff HEAD --name-only
# Analyser les changements de chaque fichier individuellement
git diff HEAD -- <fichier>
# Déterminer le type de changement pour les fichiers
git diff HEAD --name-status | while read status file; do
case $status in
A) echo "$file: Nouvelle création" ;;
M) echo "$file: Modification" ;;
D) echo "$file: Suppression" ;;
R*) echo "$file: Renommé" ;;
esac
done
Par fonctionnalité : Garder les fonctions liées ensemble
src/auth/ → Authentificationcomponents/ → Composants UIPar type : Même type de changements
test:docs:chore:Par dépendances : Fichiers qui ont besoin les uns des autres
Par taille : Garder les commits gérables
$ /semantic-commit
Analyse des changements...
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Changements détectés :
• src/auth/login.ts (modifié)
• src/auth/register.ts (nouveau)
• src/auth/types.ts (modifié)
• tests/auth.test.ts (nouveau)
• docs/authentication.md (nouveau)
Divisions de commits proposées :
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Commit 1/3
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Message : feat: implémenter système d'enregistrement et connexion utilisateur
Fichiers inclus :
• src/auth/login.ts
• src/auth/register.ts
• src/auth/types.ts
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Commit 2/3
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Message : test: ajouter tests complets pour système d'authentification
Fichiers inclus :
• tests/auth.test.ts
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Commit 3/3
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Message : docs: ajouter documentation du système d'authentification
Fichiers inclus :
• docs/authentication.md
Exécuter le commit avec ce plan de division ? (y/n/edit):
y : Procéder avec la division proposéen : Tout annuleredit : Changer les messages de commitmerge <numéro1> <numéro2> : Combiner les commitssplit <numéro> : Diviser davantage un commit$ /semantic-commit --dry-run
Analyse des changements... (DRY RUN)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
[Affichage de la proposition de division de commit]
ℹ️ Mode DRY RUN : Aucun commit réel ne sera exécuté
💡 Pour exécuter, relancez sans l'option --dry-run
# Détecter les patterns de correction de bugs
- Mots-clés comme "fix", "bug", "error"
- Ajout de gestion d'exceptions
- Corrections de branches de conditions
# Détecter les patterns de nouvelles fonctionnalités
- Création de nouveaux fichiers
- Ajouts de nouvelles méthodes
- Ajouts de points de terminaison API
# Réinitialiser les changements non stagés s'il y en a
git reset HEAD
git status --porcelain > /tmp/original_state.txt
# Vérifier la branche de travail
CURRENT_BRANCH=$(git branch --show-current)
echo "Branche de travail : $CURRENT_BRANCH"
# Lire le plan de division
while IFS= read -r commit_plan; do
group_num=$(echo "$commit_plan" | cut -d':' -f1)
files=$(echo "$commit_plan" | cut -d':' -f2- | tr ' ' '\n')
echo "=== Exécution du commit $group_num ==="
# Stager uniquement les fichiers pertinents
echo "$files" | while read file; do
if [ -f "$file" ]; then
git add "$file"
echo "Stagé : $file"
fi
done
# Vérifier le statut de staging
staged_files=$(git diff --staged --name-only)
if [ -z "$staged_files" ]; then
echo "Attention : Aucun fichier stagé"
continue
fi
# Générer le message de commit (analyse LLM)
commit_msg=$(generate_commit_message_for_staged_files)
# Confirmation utilisateur
echo "Message de commit proposé : $commit_msg"
echo "Fichiers stagés :"
echo "$staged_files"
read -p "Exécuter ce commit ? (y/n) : " confirm
if [ "$confirm" = "y" ]; then
# Exécuter le commit
git commit -m "$commit_msg"
echo "✅ Commit $group_num terminé"
else
# Annuler le staging
git reset HEAD
echo "❌ Commit $group_num ignoré"
fi
done < /tmp/commit_plan.txt
# Gérer les échecs de hooks pre-commit
commit_with_retry() {
local commit_msg="$1"
local max_retries=2
local retry_count=0
while [ $retry_count -lt $max_retries ]; do
if git commit -m "$commit_msg"; then
echo "✅ Commit réussi"
return 0
else
echo "❌ Échec du commit (tentative $((retry_count + 1))/$max_retries)"
# Incorporer les corrections automatiques des hooks pre-commit
if git diff --staged --quiet; then
echo "Changements automatiquement corrigés par le hook pre-commit"
git add -u
fi
retry_count=$((retry_count + 1))
fi
done
echo "❌ Échec du commit. Veuillez vérifier manuellement."
return 1
}
# Récupérer des interruptions
resume_from_failure() {
echo "Processus de commit interrompu détecté"
echo "Statut de staging actuel :"
git status --porcelain
read -p "Continuer le traitement ? (y/n) : " resume
if [ "$resume" = "y" ]; then
# Reprendre depuis le dernier commit
last_commit=$(git log --oneline -1 --pretty=format:"%s")
echo "Dernier commit : $last_commit"
else
# Réinitialisation complète
git reset HEAD
echo "Processus réinitialisé"
fi
}
# Vérifier que tous les changements ont été committés
remaining_changes=$(git status --porcelain | wc -l)
if [ $remaining_changes -eq 0 ]; then
echo "✅ Tous les changements committés"
else
echo "⚠️ Changements non committés restants :"
git status --short
fi
# Afficher l'historique des commits
echo "Commits créés :"
git log --oneline -n 10 --graph
# Note : Pas de push automatique
echo "📝 Note : Push automatique non effectué"
echo "Si nécessaire, pushez avec la commande suivante :"
echo " git push origin $CURRENT_BRANCH"
# Obtenir et classifier tous les fichiers modifiés
git diff HEAD --name-status | while read status file; do
echo "$status:$file"
done > /tmp/changes.txt
# Statistiques des changements par répertoire fonctionnel
git diff HEAD --name-only | cut -d'/' -f1-2 | sort | uniq -c
# Groupement basé sur les répertoires
GROUPS=$(git diff HEAD --name-only | cut -d'/' -f1-2 | sort | uniq)
for group in $GROUPS; do
echo "=== Groupe : $group ==="
git diff HEAD --name-only | grep "^$group" | head -10
done
# Analyser le type de changement pour chaque fichier
git diff HEAD --name-only | while read file; do
# Détecter les ajouts de nouvelles fonctions/classes
NEW_FUNCTIONS=$(git diff HEAD -- "$file" | grep -c '^+.*function\|^+.*class\|^+.*def ')
# Détecter les patterns de correction de bugs
BUG_FIXES=$(git diff HEAD -- "$file" | grep -c '^+.*fix\|^+.*bug\|^-.*error')
# Déterminer si c'est un fichier de test
if [[ "$file" =~ test|spec ]]; then
echo "$file: TEST"
elif [ $NEW_FUNCTIONS -gt 0 ]; then
echo "$file: FEAT"
elif [ $BUG_FIXES -gt 0 ]; then
echo "$file: FIX"
else
echo "$file: REFACTOR"
fi
done
# Analyser les relations d'import
git diff HEAD | grep -E '^[+-].*import|^[+-].*from.*import' | \
while read line; do
echo "$line" | sed 's/^[+-]//' | awk '{print $2}'
done | sort | uniq > /tmp/imports.txt
# Grouper les fichiers liés
git diff HEAD --name-only | while read file; do
basename=$(basename "$file" .js .ts .py)
related=$(git diff HEAD --name-only | grep "$basename" | grep -v "^$file$")
if [ -n "$related" ]; then
echo "Fichiers liés : $file <-> $related"
fi
done
# Ajuster la taille des groupes
MAX_FILES_PER_COMMIT=8
current_group=1
file_count=0
git diff HEAD --name-only | while read file; do
if [ $file_count -ge $MAX_FILES_PER_COMMIT ]; then
current_group=$((current_group + 1))
file_count=0
fi
echo "Commit $current_group: $file"
file_count=$((file_count + 1))
done
# Vérifier les résultats de division
for group in $(seq 1 $current_group); do
files=$(grep "Commit $group:" /tmp/commit_plan.txt | cut -d':' -f2-)
lines=$(echo "$files" | xargs git diff HEAD -- | wc -l)
echo "Commit $group: $(echo "$files" | wc -w) fichiers, $lines lignes modifiées"
done
<type>[scope optionnel]: <description>
[corps optionnel]
[pied(s) optionnel(s)]
Types requis :
feat : Nouvelle fonctionnalité (ajout de fonctionnalité visible par l'utilisateur)fix : Correction de bugTypes optionnels :
build : Changements au système de build ou aux dépendances externeschore : Autres changements (sans impact sur la release)ci : Changements aux fichiers de configuration CI ou aux scriptsdocs : 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 ou ajouts de fonctionnalitésperf : Améliorations de performancetest : Ajout ou modification de testsIndique la zone affectée par le changement :
feat(api): add user authentication endpoint
fix(ui): resolve button alignment issue
docs(readme): update installation instructions
Quand il y a des changements d'API breaking :
feat!: change user API response format
ou
feat(api)!: change authentication flow
Important : Si des conventions spécifiques au projet existent, elles prennent la priorité.
Détection automatique de la configuration à partir des fichiers suivants :
commitlint.config.jscommitlint.config.mjscommitlint.config.cjscommitlint.config.ts.commitlintrc.js.commitlintrc.json.commitlintrc.yml.commitlintrc.yamlcommitlint dans package.json# Vérifier les fichiers de configuration exemple
cat commitlint.config.mjs
cat .commitlintrc.json
grep -A 10 '"commitlint"' package.json
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 d'urgence
"release", // Release
"deps", // Mise à jour de dépendance
"config", // Changement de configuration
],
],
},
};
// Quand le projet utilise des messages en français
export default {
rules: {
"subject-case": [0], // Désactiver pour le support français (accents)
"subject-max-length": [2, "always", 72], // Ajuster la limite de caractères pour le français
},
};
Recherche de fichiers de configuration
find . -name "commitlint.config.*" -o -name ".commitlintrc.*" | head -1
Analyse des commits existants
git log --oneline -50 --pretty=format:"%s"
Statistiques d'usage des types
git log --oneline -100 --pretty=format:"%s" | \
grep -oE '^[a-z]+(\([^)]+\))?' | \
sort | uniq -c | sort -nr
feat(scope): add new feature
fix(scope): fix bug
docs(scope): update documentation
✨ feat: add user registration
🐛 fix: resolve login issue
📚 docs: update API docs
feat: ajout de la fonctionnalité d'inscription utilisateur
fix: correction du bug du processus de connexion
docs: mise à jour de la documentation API
Comment nous déterminons votre langue :
Option explicite avec --lang
# Forcer en français
/semantic-commit --lang fr
# Forcer en anglais
/semantic-commit --lang en
Analyse du git log pour la détermination automatique
# Analyser la langue des 20 derniers commits
git log --oneline -20 --pretty=format:"%s" | \
grep -E '^[\x{00C0}-\x{017F}]' | wc -l
# Mode français si détection de caractères accentués
Fichiers de projet paramètres de langue
# Vérifier la langue du README.md
head -10 README.md | grep -E '^[\x{00C0}-\x{017F}]' | wc -l
# Vérifier la description de package.json
grep -E '"description".*[\x{00C0}-\x{017F}]' package.json
Analyse des commentaires et chaînes dans les fichiers modifiés
# Vérifier la langue des commentaires dans les fichiers modifiés
git diff HEAD | grep -E '^[+-].*//.*[\x{3040}-\x{30ff}]|[\x{4e00}-\x{9fff}]' | wc -l
# Calcul du score de langue française
FRENCH_SCORE=0
# 1. Configurations CommitLint (+3 points)
if grep -q '"subject-case".*\[0\]' commitlint.config.* 2>/dev/null; then
FRENCH_SCORE=$((FRENCH_SCORE + 3))
fi
# 2. Analyse de git log (max +2 points)
FRENCH_COMMITS=$(git log --oneline -20 --pretty=format:"%s" | \
grep -cE '[àâäçéèêëïîôùûüÿæœÀÂÄÇÉÈÊËÏÎÔÙÛÜŸÆŒ]' 2>/dev/null || echo 0)
if [ $FRENCH_COMMITS -gt 10 ]; then
FRENCH_SCORE=$((FRENCH_SCORE + 2))
elif [ $FRENCH_COMMITS -gt 5 ]; then
FRENCH_SCORE=$((FRENCH_SCORE + 1))
fi
# 3. Vérification README.md (+1 point)
if head -5 README.md 2>/dev/null | grep -qE '[àâäçéèêëïîôùûüÿæœÀÂÄÇÉÈÊËÏÎÔÙÛÜŸÆŒ]'; then
FRENCH_SCORE=$((FRENCH_SCORE + 1))
fi
# 4. Vérification du contenu des fichiers modifiés (+1 point)
if git diff HEAD 2>/dev/null | grep -qE '^[+-].*[àâäçéèêëïîôùûüÿæœÀÂÄÇÉÈÊËÏÎÔÙÛÜŸÆŒ]'; then
FRENCH_SCORE=$((FRENCH_SCORE + 1))
fi
# Déterminer : mode français si score >= 3
if [ $FRENCH_SCORE -ge 3 ]; then
LANGUAGE="fr"
else
LANGUAGE="en"
fi
Nous vérifions les fichiers de configuration dans cet ordre :
Rechercher les fichiers de configuration CommitLint
# Rechercher dans cet ordre, utiliser le premier fichier trouvé
commitlint.config.mjs
commitlint.config.js
commitlint.config.cjs
commitlint.config.ts
.commitlintrc.js
.commitlintrc.json
.commitlintrc.yml
.commitlintrc.yaml
package.json (section commitlint)
Parser le contenu de configuration
Analyser l'historique des commits existants
# Apprendre les patterns d'usage à partir des commits récents
git log --oneline -100 --pretty=format:"%s" | \
head -20
commitlint.config.mjs standard :
export default {
extends: ["@commitlint/config-conventional"],
rules: {
"type-enum": [
2,
"always",
["feat", "fix", "docs", "style", "refactor", "perf", "test", "chore"],
],
"scope-enum": [2, "always", ["api", "ui", "core", "auth", "db"]],
},
};
Configuration compatible japonais :
export default {
extends: ["@commitlint/config-conventional"],
rules: {
"subject-case": [0], // Désactiver pour le japonais
"subject-max-length": [2, "always", 72],
"type-enum": [
2,
"always",
["feat", "fix", "docs", "style", "refactor", "test", "chore"],
],
},
};
Configuration avec types personnalisés :
export default {
extends: ["@commitlint/config-conventional"],
rules: {
"type-enum": [
2,
"always",
[
"feat",
"fix",
"docs",
"style",
"refactor",
"test",
"chore",
"wip", // Travail en cours
"hotfix", // Correction d'urgence
"release", // Préparation de release
"deps", // Mise à jour de dépendance
"config", // Changement de configuration
],
],
},
};
Si aucun fichier de configuration n'est trouvé :
Inférence automatique par analyse du git log
# Extraire les types des 100 derniers commits
git log --oneline -100 --pretty=format:"%s" | \
grep -oE '^[a-z]+(\([^)]+\))?' | \
sort | uniq -c | sort -nr
Par défaut au standard Conventional Commits
feat, fix, docs, style, refactor, perf, test, chore, build, ci
Détermination de langue
git push vous-mêmegit stash pour la sécuritéLors de la création de messages de commit, nous suivons cet ordre :
Paramètres CommitLint (priorité la plus élevée)
commitlint.config.*Historique des commits existants (deuxième priorité)
Type de projet (troisième priorité)
package.json → Projet Node.jsCargo.toml → Projet Rustpom.xml → Projet JavaStandard Conventional Commits (fallback)
Détection automatique de scope dans Monorepo :
# Inférer les scopes à partir du dossier packages/
ls packages/ | head -10
# → Proposer api, ui, core, auth, etc. comme scopes
Conventions spécifiques au framework :
// Pour les projets Angular
{
'scope-enum': [2, 'always', [
'animations', 'common', 'core', 'forms', 'http', 'platform-browser',
'platform-server', 'router', 'service-worker', 'upgrade'
]]
}
// Pour les projets React
{
'scope-enum': [2, 'always', [
'components', 'hooks', 'utils', 'types', 'styles', 'api'
]]
}
Conventions spécifiques à l'entreprise/équipe :
// Pattern courant dans les équipes françaises
{
'type-enum': [2, 'always', [
'feat', 'fix', 'docs', 'style', 'refactor', 'test', 'chore',
'wip', // Travail en cours (pour les pull requests)
'hotfix', // Correction d'urgence
'release' // Préparation de release
]],
'subject-case': [0], // Support japonais
'subject-max-length': [2, 'always', 72] // Limite plus longue pour le japonais
}
Avant (un commit massif) :
# Fichiers modifiés (15 fichiers, 850 lignes modifiées)
src/auth/login.js # Nouveau
src/auth/register.js # Nouveau
src/auth/password.js # Nouveau
src/auth/types.js # Nouveau
src/api/auth-routes.js # Nouveau
src/middleware/auth.js # Nouveau
src/database/migrations/001_users.sql # Nouveau
src/database/models/user.js # Nouveau
tests/auth/login.test.js # Nouveau
tests/auth/register.test.js # Nouveau
tests/api/auth-routes.test.js # Nouveau
docs/authentication.md # Nouveau
package.json # Ajout de dépendance
README.md # Ajout d'usage
.env.example # Exemple de variable d'environnement
# Commit conventionnel problématique
feat: implement complete user authentication system with login, registration, password reset, API routes, database models, tests and documentation
Après (divisé en 5 commits significatifs) :
# Commit 1 : Fondation base de données
feat(db): add user model and authentication schema
Fichiers inclus :
- src/database/migrations/001_users.sql
- src/database/models/user.js
- src/auth/types.js
Raison : La structure de base de données est la fondation pour les autres fonctionnalités, committée en premier
# Commit 2 : Logique d'authentification
feat(auth): implement core authentication functionality
Fichiers inclus :
- src/auth/login.js
- src/auth/register.js
- src/auth/password.js
- src/middleware/auth.js
Raison : Logique métier d'authentification centrale committée ensemble
# Commit 3 : Points de terminaison API
feat(api): add authentication API routes
Fichiers inclus :
- src/api/auth-routes.js
Raison : La couche API dépend de la logique d'authentification, committée plus tard
# Commit 4 : Tests complets
test(auth): add comprehensive authentication tests
Fichiers inclus :
- tests/auth/login.test.js
- tests/auth/register.test.js
- tests/api/auth-routes.test.js
Raison : Tests ajoutés après que l'implémentation soit complète
# Commit 5 : Documentation et configuration
docs(auth): add authentication documentation and configuration
Fichiers inclus :
- docs/authentication.md
- package.json
- README.md
- .env.example
Raison : Documentation et configuration committées ensemble à la fin
Avant (commit mixte problématique) :
# Fichiers modifiés (8 fichiers, 320 lignes modifiées)
src/user/service.js # Corrections de bugs + Refactorisation
src/user/validator.js # Nouveau (refactorisation)
src/auth/middleware.js # Correction de bug
src/api/user-routes.js # Correction de bug + Amélioration de gestion d'erreurs
tests/user.test.js # Ajout de test
tests/auth.test.js # Ajout de test de correction de bug
docs/user-api.md # Mise à jour de documentation
package.json # Mise à jour de dépendance
# Commit problématique
fix: resolve user validation bugs and refactor validation logic with improved error handling
Après (divisé en 3 commits par type) :
# Commit 1 : Corrections de bugs critiques
fix: resolve user validation and authentication bugs
Fichiers inclus :
- src/user/service.js (portion correction de bug uniquement)
- src/auth/middleware.js
- tests/auth.test.js (tests de correction de bugs uniquement)
Raison : Bugs affectant la production corrigés avec la priorité la plus élevée
# Commit 2 : Refactorisation de logique de validation
refactor: extract and improve user validation logic
Fichiers inclus :
- src/user/service.js (portion refactorisation)
- src/user/validator.js
- src/api/user-routes.js
- tests/user.test.js
Raison : Améliorations structurelles committées comme unités fonctionnelles
# Commit 3 : Documentation et mise à jour de dépendance
chore: update documentation and dependencies
Fichiers inclus :
- docs/user-api.md
- package.json
Raison : Améliorations de l'environnement de développement committées ensemble à la fin
Avant (commit massif cross-fonctionnel) :
# Fichiers modifiés (12 fichiers, 600 lignes modifiées)
src/user/profile.js # Nouvelle fonctionnalité A
src/user/avatar.js # Nouvelle fonctionnalité A
src/notification/email.js # Nouvelle fonctionnalité B
src/notification/sms.js # Nouvelle fonctionnalité B
src/api/profile-routes.js # API nouvelle fonctionnalité A
src/api/notification-routes.js # API nouvelle fonctionnalité B
src/dashboard/widgets.js # Nouvelle fonctionnalité C
src/dashboard/charts.js # Nouvelle fonctionnalité C
tests/profile.test.js # Tests nouvelle fonctionnalité A
tests/notification.test.js # Tests nouvelle fonctionnalité B
tests/dashboard.test.js # Tests nouvelle fonctionnalité C
package.json # Dépendances de toutes les fonctionnalités
# Commit problématique
feat: add user profile management, notification system and dashboard widgets
Après (divisé en 4 commits par fonctionnalité) :
# Commit 1 : Fonctionnalité profil utilisateur
feat(profile): add user profile management
Fichiers inclus :
- src/user/profile.js
- src/user/avatar.js
- src/api/profile-routes.js
- tests/profile.test.js
Raison : La fonctionnalité profil est une unité fonctionnelle indépendante
# Commit 2 : Système de notification
feat(notification): implement email and SMS notifications
Fichiers inclus :
- src/notification/email.js
- src/notification/sms.js
- src/api/notification-routes.js
- tests/notification.test.js
Raison : La fonctionnalité notification est une unité fonctionnelle indépendante
# Commit 3 : Widgets de tableau de bord
feat(dashboard): add interactive widgets and charts
Fichiers inclus :
- src/dashboard/widgets.js
- src/dashboard/charts.js
- tests/dashboard.test.js
Raison : La fonctionnalité tableau de bord est une unité fonctionnelle indépendante
# Commit 4 : Mise à jour des dépendances et infrastructure
chore: update dependencies for new features
Fichiers inclus :
- package.json
Raison : Mises à jour de dépendances communes committées ensemble à la fin
| Élément | Avant (Commit massif) | Après (Division appropriée) |
|---|---|---|
| Reviewabilité | ❌ Très difficile | ✅ Chaque commit est petit et reviewable |
| Suivi de bugs | ❌ Difficile d'identifier l'emplacement du problème | ✅ Les commits problématiques peuvent être immédiatement identifiés |
| Revert | ❌ Besoin de tout reverter | ✅ Peut identifier et reverter uniquement les parties problématiques |
| Développement parallèle | ❌ Sujet aux conflits | ✅ Fusion basée sur les fonctionnalités est facile |
| Déploiement | ❌ Toutes les fonctionnalités déployées en une fois | ✅ Déploiement par étapes possible |
--max-commitseditnpx claudepluginhub wasabeef/claude-code-cookbook --plugin cook-frSplits large uncommitted changes into small, semantic commits grouped by functional boundaries, change type, or dependencies. Useful for maintaining clean git history.
Splits uncommitted changes into logical, semantic commits with meaningful messages using git commands.
Splits large git changes into minimal semantic units and commits them sequentially with semantic messages. Useful for organizing messy working trees into clean commits.