Commiter par lots
Divisez le travail non versionné en commits logiques. Chaque commit doit être révisable de manière autonome et inclure tous les fichiers nécessaires à la cohérence de cette partie.
Sécurité (toujours)
- Ne jamais mettre à jour la configuration Git.
- Ne jamais forcer le push, faire un hard reset ou toute autre opération destructive Git sauf demande explicite de l'utilisateur.
- Ne jamais sauter les hooks (
--no-verify, etc.) sauf demande explicite de l'utilisateur. - Ne jamais mettre en scène des secrets (
.env, identifiants, clés). Avertissez et excluez-les. - Ne jamais utiliser
git commit --amendsauf si les règles de l'utilisateur pour l'amend sont entièrement respectées. - Si un hook de commit échoue, corrigez le problème et créez un nouveau commit ; ne modifiez pas un commit échoué.
- N'ajoutez pas
Co-authored-by: Cursoraux messages de commit.
1. Inspection
Exécutez en parallèle lorsque c'est possible :
git statusgit diffetgit diff --stagedgit log -5 --onelinepour le style du messagegit remote -vet le suivi de branche (git status -sb)
S'il n'y a rien à commiter, arrêtez-vous et dites-le.
2. Planification des lots
Regroupez les modifications par objectif, pas uniquement par type de fichier. Exemples :
- Une fonctionnalité ou un comportement utilisateur + ses tests et sa documentation
- Un correctif de bug + uniquement les fichiers qui le corrigent
- Une refactorisation qui tient seule sans mélanger des fonctionnalités sans rapport
- Une tâche ménagère ou un outillage limité à un domaine (dépendances, CI, configuration)
Règles :
- Ne mélangez pas des fonctionnalités sans rapport dans un même commit.
- Incluez les fichiers compagnons dans le même lot (par exemple schéma + entité + migration + sites d'appel pour une modification).
- Si un fichier touche deux préoccupations, privilégiez le lot dominant ou mentionnez le compromis avant de commiter.
- Listez les lots dans l'ordre : les fondations d'abord (types partagés, configuration), puis les fonctionnalités, puis la documentation seule si elle dépend des commits précédents.
Présentez à l'utilisateur un court plan : numéro du lot, fichiers ou chemins, sujet proposé de commit conventionnel. Continuez ensuite sauf objection.
3. Validation de chaque lot
Pour chaque lot, séquentiellement :
- Mettez en scène uniquement ce lot (
git addchemins spécifiques ; évitezgit add -Asauf si tout l'arbre est un seul lot). - Revérifiez avec
git diff --stagedqu'aucun élément non lié ne s'est glissé. - Rédigez un sujet de Commit Conventionnel (
feat,fix,chore,docs,refactor,test, etc.) axé sur le pourquoi. - Si le nom de branche contient un identifiant de problème, ajoutez
#<problème>au sujet (style GitLab). - Commitez. Sur Windows PowerShell, utilisez
git commit -m 'sujet'(ou plusieurs-mpour un corps court). Sur bash, un HEREDOC pour le message est acceptable. - Répétez jusqu'à ce que l'arbre de travail soit propre pour les modifications prévues.
4. Pousser vers GitHub (ou distant)
Après tous les lots :
- Si
origin(ou le distant nommé par l'utilisateur) existe et la branche doit être publiée, exécutezgit push -u origin HEADlorsque l'amont est manquant, sinongit push. - Ne forcez jamais le push sur
mainoumaster. - Si le push est rejeté, signalez l'erreur et suggérez un pull/rebase ; ne forcez pas sauf demande explicite de l'utilisateur.
- S'il n'y a pas de distant, dites que les commits sont uniquement locaux et demandez si l'utilisateur souhaite ajouter un distant.
5. Rapport
Résumez :
- Chaque hash de commit et son sujet (le plus récent en dernier ou sous forme de liste numérotée).
- Résultat du push (URL ou branche si disponible).
- Tout élément intentionnellement non mis en scène (secrets, fichiers locaux uniquement).
Relation avec commit-msg
commit-msg suggère une ligne à partir des fichiers déjà en scène et ne valide pas. Cette compétence planifie, met en scène, valide en plusieurs étapes et pousse.