Workflow Git Commit
Créer un commit bien formaté avec les arguments : $ARGUMENTS
IMPORTANT : Task Management System obligatoire
RÈGLE CRITIQUE : Chaque étape DOIT être trackée via TaskCreate/TaskUpdate.
- •Créer TOUTES les tâches AVANT de commencer
- •Marquer
in_progressau début de chaque étape - •Marquer
completedUNIQUEMENT quand l'étape est 100% terminée - •NE JAMAIS sauter une étape
Instructions à Exécuter
Étape 1 : Créer TOUTES les tâches du workflow
OBLIGATOIRE : Utilise TaskCreate pour créer ces 5 tâches dans cet ordre exact :
TaskCreate #1: "Vérifier les changements disponibles" - activeForm: "Checking available changes" - description: "git status + git diff pour voir les fichiers modifiés" TaskCreate #2: "Analyser le diff des changements" - activeForm: "Analyzing diff content" - description: "git diff --cached pour comprendre les changements" TaskCreate #3: "Déterminer la stratégie de commit" - activeForm: "Determining commit strategy" - description: "Décider si un ou plusieurs commits sont nécessaires" TaskCreate #4: "Créer le(s) commit(s)" - activeForm: "Creating commit(s)" - description: "git commit avec message formaté emoji + conventional" TaskCreate #5: "Push vers remote" - activeForm: "Pushing to remote" - description: "git push (sauf si --no-push)"
Après création : Affiche TaskList pour confirmer que les 5 tâches existent.
Étape 2 : Vérifier les changements disponibles
TaskUpdate : Tâche #1 → in_progress
Exécute en parallèle :
git status git diff --cached --stat
Traitement :
- •
SI aucun changement (ni stagé, ni non-stagé) :
- •Affiche "❌ Aucun changement à committer"
- •TaskUpdate : Tâche #1 →
completed - •STOP - Ne pas continuer
- •
SI des fichiers modifiés mais rien de stagé :
- •Exécute
git add .pour tout stager - •Exécute
git statuspour confirmer
- •Exécute
- •
SI des fichiers déjà stagés :
- •Continue avec ces fichiers uniquement
TaskUpdate : Tâche #1 → completed
Étape 3 : Analyser le diff des changements
TaskUpdate : Tâche #2 → in_progress
Exécute en parallèle :
git diff --cached git log -5 --oneline
Traitement :
- •Lis TOUT le diff des changements stagés
- •Note le style des commits récents du repo
- •Identifie les types de changements présents :
- •feat (nouvelles fonctionnalités)
- •fix (corrections de bugs)
- •docs (documentation)
- •refactor (refactorisation)
- •test (tests)
- •chore (configuration, maintenance)
- •style (formatage)
- •perf (performance)
TaskUpdate : Tâche #2 → completed
Étape 4 : Déterminer la stratégie de commit
TaskUpdate : Tâche #3 → in_progress
Critères pour DIVISER en plusieurs commits :
- •Préoccupations distinctes (feat + docs + tests mélangés)
- •Types de changements différents (fix + refactor)
- •Fichiers non-liés modifiés ensemble
- •Diff > 200 lignes sur sujets différents
SI plusieurs types détectés :
- •Liste les commits à créer
- •Pour chaque commit, utilise :
bash
git reset HEAD <fichiers-à-exclure> git commit -m "..." git add <fichiers-suivants>
SINON :
- •Continue avec un seul commit
TaskUpdate : Tâche #3 → completed
Étape 5 : Créer le(s) commit(s)
TaskUpdate : Tâche #4 → in_progress
Pour CHAQUE commit à créer :
5.1 Déterminer le message
- •Type : feat, fix, docs, refactor, test, chore, style, perf, ci, revert
- •Emoji : Voir table ci-dessous
- •Scope : Optionnel, entre parenthèses (auth, api, ui...)
- •Description : < 72 caractères, mode impératif, présent
5.2 Exécuter le commit
OBLIGATOIRE : Utilise TOUJOURS un HEREDOC pour le message :
git commit -m "$(cat <<'EOF' <emoji> <type>(<scope>): <description courte> <détails optionnels - explique le "pourquoi"> EOF )"
Exemple simple :
git commit -m "$(cat <<'EOF' ✨ feat(auth): ajouter connexion OAuth Google EOF )"
Exemple avec corps :
git commit -m "$(cat <<'EOF' 🐛 fix(api): corriger fuite mémoire dans le cache Le cache ne libérait pas les entrées expirées, causant une augmentation progressive de la mémoire utilisée. Fixes #123 EOF )"
TaskUpdate : Tâche #4 → completed
Étape 6 : Push vers remote
TaskUpdate : Tâche #5 → in_progress
6.1 Vérifier l'option --no-push
SI --no-push présent dans $ARGUMENTS :
- •Affiche "📝 Commit local uniquement (--no-push)"
- •TaskUpdate : Tâche #5 →
completed - •STOP - Workflow terminé
6.2 Push automatique
Le hook PostToolUse gère automatiquement :
- •Premier push :
git push -u origin <branch> - •Push suivants :
git push
TaskUpdate : Tâche #5 → completed
Checklist de validation finale
Avant de terminer, vérifie que TOUTES ces conditions sont remplies :
- • Tâche #1 completed : Changements vérifiés et stagés
- • Tâche #2 completed : Diff analysé
- • Tâche #3 completed : Stratégie déterminée
- • Tâche #4 completed : Commit(s) créé(s) avec HEREDOC
- • Tâche #5 completed : Push effectué (ou skip si --no-push)
Si une tâche n'est pas completed, NE PAS terminer.
Table des Emojis par Type
| Type | Emoji | Usage |
|---|---|---|
| feat | ✨ | Nouvelle fonctionnalité |
| fix | 🐛 | Correction de bug |
| docs | 📝 | Documentation |
| style | 💄 | Formatage/style (pas de changement de logique) |
| refactor | ♻️ | Refactorisation de code |
| perf | ⚡️ | Amélioration de performance |
| test | ✅ | Ajout/modification de tests |
| chore | 🔧 | Outils, configuration, maintenance |
| ci | 🚀 | CI/CD |
| revert | ⏪️ | Annulation de changements |
Emojis Spécialisés
| Contexte | Emoji | Description |
|---|---|---|
| Breaking change | 💥 | Changement cassant |
| Security | 🔒️ | Sécurité |
| Hotfix | 🚑️ | Correction critique urgente |
| Typo | ✏️ | Faute de frappe |
| WIP | 🚧 | Travail en cours |
| Lint/warnings | 🚨 | Correction warnings linter |
| Dependencies + | ➕ | Ajout dépendance |
| Dependencies - | ➖ | Suppression dépendance |
| Database | 🗃️ | Changements BDD |
| Logs + | 🔊 | Ajout de logs |
| Logs - | 🔇 | Suppression de logs |
| Types | 🏷️ | Définitions de types |
| UX | 🚸 | Amélioration UX |
| Accessibility | ♿️ | Accessibilité |
| i18n | 🌐 | Internationalisation |
| Business logic | 👔 | Logique métier |
| Architecture | 🏗️ | Changements architecturaux |
| Dead code | ⚰️ | Suppression code mort |
| Remove files | 🔥 | Suppression fichiers |
| Move/rename | 🚚 | Déplacement/renommage |
| Assets | 🍱 | Assets (images, etc.) |
| UI animations | 💫 | Animations UI |
| Validation | 🦺 | Code de validation |
| Feature flags | 🚩 | Feature flags |
| Analytics | 📈 | Tracking/analytics |
| CI fix | 💚 | Correction CI |
| Snapshot tests | 📸 | Tests snapshot |
| Mock | 🤡 | Mocking |
| Experiment | ⚗️ | Expérimentations |
| Seed data | 🌱 | Données de seed |
| .gitignore | 🙈 | Fichier .gitignore |
| License | 📄 | Licence |
| Contributors | 👥 | Contributeurs |
| DX | 🧑💻 | Developer Experience |
| Responsive | 📱 | Design responsive |
| SEO | 🔍️ | SEO |
| Offline | ✈️ | Support offline |
| Concurrency | 🧵 | Multithreading |
| Easter egg | 🥚 | Easter egg |
| Comments | 💡 | Commentaires dans le code |
| Text/literals | 💬 | Textes et littéraux |
| External API | 👽️ | Changements API externe |
| Error handling | 🥅 | Gestion d'erreurs |
| Simple fix | 🩹 | Fix non-critique simple |
| Package build | 📦️ | Fichiers compilés/packages |
| Pin deps | 📌 | Épingler versions |
| Release tag | 🔖 | Tags de release |
| Init project | 🎉 | Début de projet |
| Merge | 🔀 | Fusion de branches |
Format du Message de Commit
<emoji> <type>(<scope>): <description impérative courte> [corps optionnel - explique le "pourquoi" pas le "quoi"] [footer optionnel - références issues, breaking changes]
Règles du Message
- •Première ligne : < 72 caractères
- •Mode impératif : "ajouter" pas "ajouté"
- •Présent : "corrige" pas "a corrigé"
- •Pas de point final sur la première ligne
- •Ligne vide entre titre et corps
- •Corps : explique le contexte et la raison
Options de Commande
| Option | Description |
|---|---|
--verify | Exécute make qa avant le commit |
--no-push | Ne push pas automatiquement après le commit |
Combinaison possible : /git:commit --verify --no-push
Directives de Division
Divise les commits si tu détectes :
- •feat + docs → 2 commits séparés
- •fix + refactor → 2 commits séparés
- •test + implementation → peut être ensemble si cohérent
- •chore (deps) + feat → toujours séparés
- •Plusieurs features distinctes → 1 commit par feature