Commit Conventions
Purpose
Définir les standards pour les commits Git dans le projet consultant-manager.
Format de Commit Message
Structure
code
<type>(<scope>): <subject> [body optionnel] [footer optionnel]
Type (Obligatoire)
- •
feat- Nouvelle fonctionnalité - •
fix- Correction de bug - •
refactor- Refactoring (ni feat ni fix) - •
style- Changements de style (format, indentation) - •
docs- Documentation uniquement - •
test- Ajout ou modification de tests - •
chore- Maintenance (deps, config, build) - •
perf- Amélioration de performance
Scope (Optionnel mais Recommandé)
Indique la partie du projet affectée:
- •
backend- Backend Express/Prisma - •
frontend- Frontend React - •
api- Routes API - •
db- Base de données/Prisma - •
ui- Interface utilisateur - •
consultants- Fonctionnalité consultants - •
missions- Fonctionnalité missions - •
dashboard- Dashboard
Subject (Obligatoire)
- •Commence par un verbe à l'impératif (add, update, fix, remove)
- •Pas de point final
- •Maximum 72 caractères
- •En français ou anglais (cohérence dans le projet)
Body (Optionnel)
- •Explique le "pourquoi" plus que le "quoi"
- •Séparé du subject par une ligne vide
- •Peut contenir plusieurs paragraphes
Footer (Optionnel)
- •Breaking changes:
BREAKING CHANGE: description - •Références issues:
Fixes #123,Closes #456
Exemples
✅ Bons Commits
Feature simple:
code
feat(consultants): add email validation in form
Fix avec contexte:
code
fix(api): prevent duplicate consultant emails Validate email uniqueness before creating consultant to avoid Prisma unique constraint errors.
Refactoring:
code
refactor(backend): extract status calculation to utility Move consultant status calculation logic from controller to utils/status.ts for better testability and reusability.
Breaking change:
code
feat(api): change consultant status enum values BREAKING CHANGE: Status values changed from French to uppercase constants (DISPONIBLE, EN_MISSION, EN_CONGES, INDISPONIBLE). Frontend must be updated to use new values.
Multiple scopes:
code
feat(consultants,missions): add revenue calculation - Add calculateRevenue utility function - Display total revenue in mission list - Show consultant total earnings in profile
Documentation:
code
docs: update README with Prisma Studio instructions
Chore:
code
chore(deps): update dependencies to latest versions Updated React, Express, Prisma to latest stable releases. No breaking changes.
❌ Mauvais Commits
code
fix bug
❌ Pas de scope, pas de détails
code
Updated stuff
❌ Pas de type, trop vague
code
feat(consultants): Added a new feature that allows users to create consultants with validation and error handling and also refactored the form component
❌ Subject trop long, fait plusieurs choses
code
fix: typo
❌ Pas assez de contexte (où?)
code
WIP
❌ Work in progress ne devrait pas être committé sur main
Workflow Git
Branches
Main branch:
- •
masteroumain- Production-ready code - •Toujours stable, tests passent
Feature branches:
- •
feature/add-consultant-photo - •
feature/export-to-excel - •
fix/mission-date-validation - •
refactor/api-error-handling
Convention de Nommage des Branches
code
<type>/<short-description> Exemples: - feature/consultant-filters - fix/date-calculation-bug - refactor/prisma-queries - docs/api-documentation
Workflow Typique
bash
# Créer une feature branch git checkout -b feature/add-consultant-search # Faire des commits atomiques git add src/components/ConsultantSearch.tsx git commit -m "feat(consultants): add search input component" git add src/pages/Consultants.tsx git commit -m "feat(consultants): integrate search in consultant list" # Pousser la branch git push -u origin feature/add-consultant-search # Créer une Pull Request # (via GitHub/GitLab UI ou gh CLI)
Commits Atomiques
Principe
Un commit = Une modification logique complète et testable.
✅ Bon: Commits Séparés
bash
git commit -m "feat(consultants): add TJM field to consultant form" git commit -m "feat(api): add TJM validation in backend" git commit -m "test(consultants): add TJM validation tests"
❌ Mauvais: Commit Monolithique
bash
git commit -m "feat: add TJM everywhere" # (contient form, API, tests, docs dans un seul commit)
Quand Commiter?
✅ Commiter Quand:
- •Une fonctionnalité est complète et testée
- •Un bug est corrigé
- •Un refactoring est terminé (code marche toujours)
- •Tests ajoutés/mis à jour
- •Documentation mise à jour
❌ Ne Pas Commiter:
- •Code qui ne compile pas
- •Tests qui échouent
- •Code commenté en masse
- •Console.log de debug partout
- •Fichiers temporaires (.env.local, node_modules)
- •WIP (sauf sur feature branch personnelle)
Pull Requests
Titre de PR
Format similaire au commit:
code
feat(consultants): Add consultant search and filters
Description de PR
Template:
markdown
## Description Ajoute la fonctionnalité de recherche et filtres pour les consultants. ## Changes - Ajout composant SearchBar - Ajout filtres par statut - Intégration API avec query params - Tests des filtres ## Screenshots [Si applicable] ## Test Plan - [ ] Rechercher par nom fonctionne - [ ] Filtrer par statut fonctionne - [ ] Combinaison recherche + filtre fonctionne - [ ] Tests unitaires passent - [ ] Pas de régression sur liste consultants ## Notes Nécessite backend version >= 1.2.0
Hooks Git
Pre-commit
bash
#!/bin/bash # .git/hooks/pre-commit # Run linter npm run lint # Run tests npm test # Check TypeScript npm run build
Messages Utiles
Pour Chercher dans l'Historique
bash
# Commits par auteur git log --author="John" # Commits sur un fichier git log -- path/to/file # Commits avec un mot-clé git log --grep="consultant" # Commits de la dernière semaine git log --since="1 week ago"
Co-Authoring (avec Claude)
Quand Claude Code aide à coder:
code
feat(consultants): add consultant export to Excel Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Checklist Pre-Commit
Avant de commiter:
- • Code compile sans erreurs TypeScript
- • Tests passent (
npm test) - • Pas de console.log oubliés
- • Pas de commentaires TODO non résolus (ou trackés)
- • Message de commit suit la convention
- • Commit est atomique (une seule responsabilité)
- • .gitignore respecté (pas de node_modules, .env, etc.)
Erreurs à Éviter
❌ Commit trop gros
bash
# 50 fichiers modifiés git add . git commit -m "updates"
✅ Commits logiques
bash
git add src/components/ConsultantForm.tsx git commit -m "feat(consultants): improve form validation" git add src/api/consultants.ts git commit -m "feat(api): add email uniqueness check"
❌ Messages vagues
code
git commit -m "fix stuff" git commit -m "update" git commit -m "changes"
✅ Messages descriptifs
code
git commit -m "fix(missions): correct revenue calculation for partial months" git commit -m "refactor(api): extract validation logic to middleware"
Outils
Commit Template
bash
# Créer un template git config commit.template ~/.gitmessage.txt # ~/.gitmessage.txt # <type>(<scope>): <subject> # # [body] # # [footer] # # Types: feat, fix, refactor, style, docs, test, chore, perf # Scopes: backend, frontend, api, db, ui, consultants, missions, dashboard
Conventional Commits CLI
bash
npm install -g @commitlint/cli @commitlint/config-conventional # Valider les messages echo "feat: add new feature" | npx commitlint