git commit

Instantanés de base

Enregistrer des modifications dans le dépôt


La commande 'git commit' crée un nouveau commit contenant le contenu actuel de l’index (zone de préparation) et un message décrivant les modifications. Le nouveau commit est un enfant direct de HEAD et devient la nouvelle pointe de la branche courante. Chaque commit est un instantané permanent de l’historique du projet, que l’on peut revoir, comparer ou restaurer à tout moment.

Synopsis

git commit [-a] [-m <msg>] [--amend] [--no-edit] [-v] [-n] [--dry-run] [-s] [-S] [--] [<pathspec>...]
[ ] facultatif| ou<arg> valeur à remplacer... répétable--flag option

Options

Cliquez sur une option pour la déplier

Débutant (8)

Utiliser le message donné comme message de commit. Peut être répété pour un message en plusieurs paragraphes.

RecommandéBien pour les messages courts ; utilisez l’éditeur pour un sujet et un corps

Exemple

git commit -m "Add login feature"

Indexer automatiquement tous les fichiers suivis modifiés et supprimés avant de committer. N’ajoute PAS les nouveaux fichiers non suivis.

Si nécessaireSaute la relecture de la préparation et n’inclut jamais les nouveaux fichiers non suivis

Exemple

git commit -a -m "Update all config files"

Remplacer la pointe de la branche courante par un nouveau commit. Sert à corriger le message du dernier commit ou à ajouter des fichiers oubliés. Crée un nouveau hash de commit.

Si nécessaireSans risque sur les commits non poussés ; réécrit l’historique s’ils sont déjà poussés

Exemple

git commit --amend -m "Fixed message"

Afficher le diff des modifications indexées dans le modèle de message. Aide à relire ce que vous committez en écrivant le message.

RecommandéMontre le diff pendant que vous écrivez le message

Exemple

git commit -v

Voir ce qui serait committé sans créer de commit. Idéal pour vérifier avant de committer.

Si nécessairePrévisualise ce qui serait commité, sans committer

Exemple

git commit --dry-run

Masquer le résumé du commit qui montre les fichiers modifiés et les insertions/suppressions.

Si nécessaireSupprime le résumé du commit — surtout pour les scripts

Exemple

git commit -q -m "Silent commit"

Ouvrir l’éditeur pour le message même avec -m, -F ou -C. Permet de retravailler le message.

Si nécessaireOuvre l’éditeur même si -m, -F ou -C ont déjà donné un message

Exemple

git commit -m "Initial message" -e

Utiliser le message de commit choisi sans lancer d’éditeur. Souvent combiné à --amend pour ajouter des fichiers sans changer le message.

Si nécessaireRéutilise le message existant, généralement avec --amend

Exemple

git commit --amend --no-edit

Intermédiaire (10)

Lire le message de commit depuis le fichier donné. Utilisez '-' pour lire depuis l’entrée standard.

Si nécessairePrend le message dans un fichier ou sur stdin — pour les scripts et les longs messages

Exemple

git commit -F commit-message.txt

Ouvrir l’éditeur de message avec le contenu du fichier donné (commit.template le définit par défaut). Laisser le modèle inchangé abandonne le commit ; sans effet quand -m ou -F fournit le message.

Si nécessairePart d’un modèle de message de commit d’équipe

Exemple

git commit -t .gitmessage

Prendre un objet commit existant et réutiliser son message et ses informations d’auteur (horodatage compris) pour créer le commit.

Si nécessaireRéutilise tels quels le message et la paternité d’un autre commit

Exemple

git commit -C HEAD~1

Comme -C, mais ouvre l’éditeur pour modifier le message. Réutilise les infos d’auteur mais permet de retoucher le texte.

Si nécessairePart du message d’un autre commit et vous laisse le modifier

Exemple

git commit -c HEAD~1

Indexer les chemins donnés en plus de ce qui est déjà indexé, puis tout committer. La doc officielle note que ce n’est en général pas ce que vous voulez, sauf pour conclure une fusion en conflit.

Si nécessairePrépare les chemins donnés en plus de ce qui est déjà préparé

Exemple

git commit -i extra-file.js -m "Include additional file"

Ne committer que le contenu de l’arbre de travail des fichiers indiqués ; les autres modifications indexées restent indexées pour plus tard. Comportement par défaut quand des chemins sont donnés.

Si nécessaireNe committe que les chemins donnés — déjà le comportement par défaut quand on donne des chemins

Exemple

git commit -o urgent-fix.js -m "Hotfix"

Utiliser l’interface interactive de sélection de patch pour choisir quelles modifications committer. Permet de committer des parties de fichiers.

RecommandéChoisir des hunks et les committer en une étape

Exemple

git commit -p

Ajouter un trailer Signed-off-by à la fin du message de commit. Certifie que vous avez le droit de soumettre le code (Developer Certificate of Origin).

Si nécessaireAjoutez-la quand le projet exige une signature DCO

Exemple

git commit -s -m "Add feature"

Désactiver l’ajout du trailer Signed-off-by. Annule un --signoff donné plus tôt sur la ligne de commande (par ex. par un alias).

Si nécessaireAnnule un --signoff précédent sur la même ligne de commande

Exemple

git commit --no-signoff -m "Skip signoff"

Inclure la sortie de git status dans le modèle de message affiché dans l’éditeur. Activé par défaut, utile pour annuler --no-status.

Si nécessaireInclut la liste de statut dans le modèle de l’éditeur (par défaut)

Exemple

git commit --status

Avancé (12)

Remplacer l’auteur du commit. Indiquez-le au format 'Author Name <email@example.com>'.

Si nécessaireCrédite le travail de quelqu’un d’autre ; pour le travail en binôme, préférez une ligne Co-authored-by

Exemple

git commit --author="John Doe <john@example.com>" -m "Fix bug"

Remplacer la date d’auteur du commit. Accepte divers formats comme ISO 8601, RFC 2822 ou des dates relatives.

Si nécessaireRemplace la date d’auteur ; rarement utile

Exemple

git commit --date="2025-01-15 10:30:00" -m "Backdated commit"

Avec --amend, -C ou -c (ou en committant après un cherry-pick en conflit), faire de vous — le committer — l’auteur du commit obtenu et renouveler l’horodatage d’auteur.

Si nécessaireRevendique la paternité en amendant ou en réutilisant un message

Exemple

git commit --amend --reset-author

Contourner les hooks pre-commit et commit-msg. Avec prudence : ces hooks font souvent respecter la qualité du code.

DéconseilléSaute les vérifications pre-commit et commit-msg — corrigez plutôt le problème signalé par le hook

Exemple

git commit -n -m "Quick fix (skip hooks)"

Autoriser un commit sans aucune modification. Pratique pour déclencher des pipelines CI/CD ou marquer des jalons.

Si nécessaireCommits sans modification, par ex. pour déclencher la CI

Exemple

git commit --allow-empty -m "Trigger rebuild"

Autoriser un commit avec un message vide. En général déconseillé, car l’historique devient plus difficile à comprendre.

DéconseilléLes messages vides rendent l’historique illisible

Exemple

git commit --allow-empty-message -m ""

Préciser comment nettoyer le message avant le commit. Modes : strip, whitespace, verbatim, scissors, default (strip si l’éditeur s’ouvre, sinon whitespace).

Si nécessaireContrôle comment les lignes # et les espaces sont retirés du message

Exemple

git commit --cleanup=verbatim -m "Keep message exactly as-is"

Signer le commit avec GPG. Prouve que le commit vient de vous et n’a pas été altéré. Nécessite une configuration GPG.

Si nécessaireSignez quand votre projet ou votre hébergeur vérifie les signatures

Exemple

git commit -S -m "Signed commit"

Ne pas signer le commit avec GPG. Passe outre la configuration commit.gpgSign si elle vaut true.

Si nécessaireRemplace commit.gpgSign pour un commit

Exemple

git commit --no-gpg-sign -m "Unsigned commit"

Créer un commit fixup à utiliser avec git rebase --autosquash. Le commit sera automatiquement fusionné dans le commit indiqué pendant le rebase.

RecommandéFaçon propre de corriger un commit plus ancien, avec rebase --autosquash

Exemple

git commit --fixup=abc1234

Créer un commit squash à utiliser avec git rebase --autosquash. Comme --fixup, mais garde les deux messages pour les combiner pendant le rebase.

Si nécessaireComme --fixup, mais permet de combiner les messages

Exemple

git commit --squash=abc1234

Ajouter un trailer (clé: valeur) au message de commit. Trailers courants : Reviewed-by, Co-authored-by, Fixes, etc.

Si nécessaireDes métadonnées structurées comme Co-authored-by ou Reviewed-by

Exemple

git commit --trailer "Reviewed-by: Jane <jane@example.com>" -m "Fix bug"

Expert (8)

Pendant un dry-run, afficher la sortie au format court. Montre le statut des fichiers de façon compacte, comme git status -s. Implique --dry-run.

Si nécessaireSortie de l’essai à blanc au format de statut court

Exemple

git commit --dry-run --short

Pendant un dry-run, afficher la sortie au format long (par défaut). Montre le statut détaillé des fichiers.

Si nécessaireSortie de l’essai à blanc au format de statut long

Exemple

git commit --dry-run --long

Pendant un dry-run, afficher la sortie au format porcelain. Une sortie stable, adaptée aux scripts, qui ne change pas entre les versions de Git.

Si nécessaireSortie de l’essai à blanc lisible par une machine, pour les scripts

Exemple

git commit --dry-run --porcelain

Afficher la branche et les infos de suivi même au format court pendant un dry-run.

Si nécessaireAjoute les infos de branche à la sortie courte/porcelain de l’essai à blanc

Exemple

git commit --dry-run --short --branch

Pour les sorties de statut short ou porcelain, terminer les entrées par NUL au lieu d’un retour à la ligne. Utile pour analyser des noms de fichiers avec des caractères spéciaux.

Si nécessaireSortie de l’essai à blanc terminée par NUL, pour les scripts

Exemple

git commit --dry-run --porcelain -z

Ne pas inclure la sortie de git status dans le modèle de message quand l’éditeur est utilisé.

Si nécessaireCache la liste de statut dans le modèle de l’éditeur

Exemple

git commit --no-status

Contourner le hook post-rewrite, que git commit ne lance qu’en cas d’amend (--amend).

Si nécessaireSaute le hook post-rewrite lors d’un --amend ; rarement utile

Exemple

git commit --amend --no-post-rewrite

Lire le pathspec depuis un fichier (un par ligne) au lieu de la ligne de commande. Utilisez '-' pour lire depuis l’entrée standard.

Si nécessairePour les scripts qui committent beaucoup de chemins

Exemple

git commit --pathspec-from-file=files.txt -m "Commit listed files"

Choisir la bonne option

Options de message

Différentes façons de fournir ou de modifier le message de commit

CommandeSourceOuvre l’éditeurCas d’usage
git commit -m "msg"En ligne✗Commits rapides avec un message court
git commit -F fileFichier✗Message préparé dans un fichier
git commit -t fileModèle✓Partir d’un modèle dans l’éditeur
git commit -eÉditeur✓Forcer l’éditeur même avec -m
git commit -C <commit>Copier✗Réutiliser le message d’un autre commit
git commit -c <commit>Copie + modification✓Modifier le message d’un autre commit

Nettoyage du message

Comment le message de commit est traité avant d’être enregistré

CommandeModeRetire les commentairesRetire les espacesIdéal pour
--cleanup=stripstrip✓✓La plupart des commits
--cleanup=whitespaceEspaces✗✓Garder les commentaires #
--cleanup=verbatimTel quel✗✗Conserver le message à l’identique
--cleanup=scissorsCiseauxSeulement sous la ligne des ciseaux✓Garder les lignes # en utilisant l’éditeur

Auteur et date

Changer qui a fait le commit et quand

CommandeRemplaceFormatUsage typique
--author="Name <email>"AuteurNom <email>Committer au nom de quelqu’un
--date="date"Date d’auteurISO 8601 / relativeAntidater des commits
--reset-authorLes deuxUtilisateur/heure actuelsS’approprier un patch appliqué

Amend et correction de l’historique

Options pour modifier des commits existants

CommandeCréeModifie HEADÀ utiliser avec
git commit --amendRemplacement✓Corriger le message ou le contenu du dernier commit
git commit --fixup=<sha>commit fixup!✗git rebase -i --autosquash
git commit --squash=<sha>commit squash!✗git rebase -i --autosquash

Ce qui est committé

Choisir quels fichiers entrent dans le commit

CommandeIndexe d’abordCommitsRépertoire de travail
git commit✗Indexé seulementInchangé
git commit -aFichiers suivisTous les suivisInchangé
git commit -i <file>IndiquésIndexé + fichierInchangé
git commit -o <file>Indiqués seulementSeulement le fichierLes autres indexés exclus
git commit -pInteractifBlocs choisisInchangé

Signature GPG

Signer les commits de façon cryptographique pour pouvoir les vérifier

CommandeActionClé utiliséeQuand l’utiliser
git commit -SSignerClé GPG par défautProuver l’authenticité des commits
git commit -S<keyid>SignerClé préciseUtiliser une autre clé de signature
git commit --no-gpg-signNe pas signerAucunPasser outre commit.gpgSign=true

Contrôle des hooks

Contourner ou contrôler les hooks pre-commit et post-commit

CommandeSauteNiveau de risqueQuand l’utiliser
git commit --no-verifypre-commit + commit-msgMoyenCorrectif urgent, réparer les hooks plus tard
git commit --no-post-rewritepost-rewriteFaibleSauter le traitement post-amend lent

Dry-run et format de sortie

Voir ce qui serait committé sans committer

CommandeFormatAnalysableMontre
--dry-runLong (par défaut)✗Statut complet avec indications
--dry-run --shortCourt✓Codes de statut compacts
--dry-run --porcelainPorcelain✓Format stable pour les scripts
--dry-run --branchAvec la branche✓Ajoute les infos de suivi au format court
--dry-run -zSéparés par NUL✓Sûr pour les noms de fichiers spéciaux

Statut affiché dans l’éditeur

Contrôler ce qui apparaît dans l’éditeur pendant la rédaction du message

CommandeDans l’éditeurEffet
git commit --statusStatut en commentairesVoir les fichiers committés (par défaut)
git commit --no-statusPas de liste de fichiersÉditeur plus épuré, moins de distraction
git commit -vDiff completRelire les modifications exactes en écrivant
git commit -qÉditeur normalMasquer le résumé après le commit

Commits spéciaux

Créer des commits dans des situations inhabituelles

CommandeAutoriseCrée un commitCas d’usage
--allow-emptyAucune modification✓Déclencheurs de CI, marqueurs de branche
--allow-empty-messagePas de message✓Scripts automatisés (déconseillé)
--trailer "Key: value"Métadonnées✓Co-authored-by, Fixes, Reviewed-by

Exemples de workflows

1
git add .

Indexer vos modifications

2
git commit -m "Fix typo in README"

Committer avec un message court

1
git add -A

Indexer toutes les modifications

2
git commit

Ouvre l’éditeur pour un message sur plusieurs lignes

3
(Write: subject line, blank line, detailed body)

Suivre la règle 50/72 pour la mise en forme

1
git add forgotten-file.js

Indexer le fichier oublié

2
git commit --amend --no-edit

L’ajouter au dernier commit sans changer le message

1
git commit --amend -m "Corrected message"

Remplacer le dernier commit avec un nouveau message

1
git commit -a -m "Update config files"

Indexer automatiquement les fichiers suivis modifiés/supprimés et committer

1
git add .

Indexer les modifications

2
git commit -S -m "Verified security patch"

Créer un commit signé GPG

Touches de l’éditeur et du mode interactif

Raccourcis clavier quand Git ouvre un éditeur pour votre message de commit, ou en mode interactif.

Vim (par défaut sur beaucoup de systèmes)

core.editor = vim
iPasser en mode insertion (commencer à taper)
EscQuitter le mode insertion
:wqEnregistrer et quitter (termine le commit)
:q!Quitter sans enregistrer (abandonne le commit)
ddSupprimer la ligne courante
uAnnuler la dernière modification

Nano

core.editor = nano
Ctrl+OEnregistrer le fichier (write out)
Ctrl+XQuitter (demande d’enregistrer s’il y a des modifications)
Ctrl+KCouper la ligne courante
Ctrl+UColler le texte coupé
Ctrl+WRechercher dans le fichier

VS Code

core.editor = "code --wait"
Ctrl+SEnregistrer le fichier
Ctrl+WFermer l’onglet (termine le commit)
Ctrl+ZAnnuler
Close without savingAbandonner le commit

Mode patch (-p)

git commit -p
yIndexer ce bloc
nNe pas indexer ce bloc
qQuitter ; ne pas indexer les blocs restants
aIndexer ce bloc et tous les suivants
dNe pas indexer ce bloc ni les suivants
sDécouper le bloc en blocs plus petits
eModifier le bloc à la main
?Afficher l’aide

Dépannage

no changes added to commit (use "git add" and/or "git commit -a")

Cause : Des fichiers ont changé mais rien n’est indexé - vous avez oublié 'git add'. (Si vous voyez 'nothing to commit, working tree clean', il n’y a aucune modification.)

Indexez les modifications avec 'git add' avant de committer. Utilisez 'git status' pour voir ce qu’il faut indexer.

git add . && git commit -m "message"

Please tell me who you are (Author identity unknown)

Cause : Git exige que user.name et user.email soient configurés avant votre premier commit.

Configurez votre identité globalement ou pour ce dépôt.

git config --global user.name "Your Name" && git config --global user.email "you@example.com"

Aborting commit due to empty commit message

Cause : Vous avez fermé l’éditeur sans écrire de message, ou le message ne contenait que des commentaires.

Écrivez un message de commit dans l’éditeur, ou utilisez l’option '-m' pour un message en ligne.

git commit -m "Your message here"

Le hook pre-commit a échoué

Cause : Un hook pre-commit (lint, tests, formatage) a trouvé des problèmes et a bloqué le commit.

Corrigez les problèmes signalés par le hook. Ne le contournez avec '--no-verify' qu’en cas de nécessité absolue.

git commit --no-verify -m "message"

Le hook commit-msg a échoué

Cause : Votre message de commit ne respecte pas le format exigé par les conventions du projet.

Suivez la convention de messages de commit de votre projet (par ex. le format Conventional Commits).

git commit -m "feat: add new feature"

Changes not staged for commit

Cause : Vous avez modifié des fichiers mais ne les avez pas ajoutés à la zone de préparation.

Utilisez 'git add' pour indexer des fichiers précis, ou 'git commit -a' pour indexer automatiquement les fichiers suivis.

git add <file> && git commit -m "message"

error: failed to push some refs (après un amend)

Cause : Vous avez fait un amend sur un commit déjà poussé, ce qui crée un historique divergent.

Faites un force push (si vous êtes seul sur la branche), ou faites un revert et créez un nouveau commit.

git push --force-with-lease

Your branch is ahead of 'origin/main' by X commits

Cause : Vous avez des commits locaux pas encore poussés.

C’est normal ! Poussez quand vous êtes prêt, ou continuez à travailler en local.

git push origin main

Astuces et pièges

Bonnes pratiques

  • ✓Écrivez des messages de commit clairs : commencez par un verbe (Add, Fix, Update, Remove) et gardez le sujet sous 50 caractères.
  • ✓Utilisez l’impératif : écrivez 'Add feature' et non 'Added feature' - imaginez compléter « This commit will... »
  • ✓Faites des commits atomiques : chaque commit doit représenter une seule modification logique. Ne mélangez pas corrections de bugs et nouvelles fonctionnalités.
  • ✓Relisez avant de committer : utilisez 'git diff --staged' pour voir exactement ce que vous allez committer.
  • ✓Ne faites jamais d’amend sur des commits poussés : amend réécrit l’historique. Ne modifiez que des commits qui n’ont pas été partagés.
  • ✓Séparez le sujet du corps par une ligne vide : pour les messages longs, la première ligne est le sujet, puis une ligne vide, puis les détails.
  • ✓Coupez le corps à 72 caractères : c’est lisible dans les terminaux et dans la sortie de git log.
  • ✓Référencez les numéros de tickets : ajoutez 'Fixes #123' ou 'Closes #456' pour relier les commits au suivi des tickets.
  • ✓Committez souvent, poussez moins souvent : de petits commits fréquents sont plus faciles à relire et à annuler que de gros commits.
  • ✓Ne committez pas les fichiers générés : gardez les artefacts de build, les dépendances (node_modules) et les fichiers compilés hors des commits.

Erreurs fréquentes

  • ✗Lancer 'git commit' sans avoir indexé les modifications : il faut d’abord 'git add', sauf avec 'git commit -a', qui n’indexe que les fichiers suivis.
  • ✗Écrire des messages vagues comme 'fix' ou 'update' : utilisez des messages clairs et descriptifs qui expliquent POURQUOI la modification a été faite.
  • ✗Committer trop de modifications sans rapport d’un coup : faites des commits atomiques - une modification logique par commit, pour faciliter relecture et annulation.
  • ✗Utiliser --amend sur des commits déjà poussés sur des branches partagées : amend réécrit l’historique et posera des problèmes aux autres.
  • ✗Oublier de configurer user.name et user.email : Git exige l’identité de l’auteur avant votre premier commit.

FAQ

A:

'git commit' ne committe que ce qui est dans la zone de préparation. 'git commit -a' indexe automatiquement tous les fichiers suivis modifiés ou supprimés avant de committer - mais PAS les nouveaux fichiers non suivis. Il faut toujours 'git add' pour les nouveaux fichiers.

A:

Pour les commits non poussés : 'git reset --soft HEAD~1' garde les modifications indexées, 'git reset HEAD~1' (identique à --mixed) les désindexe, 'git reset --hard HEAD~1' les jette. Pour les commits poussés : utilisez 'git revert HEAD' pour créer un nouveau commit qui annule les modifications.

A:

Pour le dernier commit : 'git commit --amend -m "New message"'. Pour les plus anciens : utilisez 'git rebase -i' et remplacez 'pick' par 'reword'. Ne le faites jamais pour des commits déjà poussés sur des branches partagées.

A:

Git ouvre votre éditeur configuré pour écrire un message. Si vous le fermez sans enregistrer de message, le commit est abandonné. Utilisez '-m' pour un message en ligne ou '--allow-empty-message' pour committer sans message (déconseillé).

A:

Indexez les fichiers supplémentaires avec 'git add <file>', puis lancez 'git commit --amend --no-edit'. Ils sont ajoutés au commit précédent sans changer son message.

A:

'--amend' remplace entièrement le dernier commit (nouveau hash !). Utilisez-le pour corriger une faute dans un message ou ajouter des fichiers oubliés. Ne l’utilisez jamais sur des commits déjà poussés sur des branches partagées - il réécrit l’historique.

A:

Utilisez plusieurs options -m : 'git commit -m "Subject" -m "Body paragraph"'. Chaque -m crée un nouveau paragraphe. Ou lancez simplement 'git commit' pour ouvrir votre éditeur.

A:

Gardez la ligne de sujet sous 50 caractères (limite stricte 72). Coupez le corps à 72 caractères. C’est lisible dans le terminal, git log et les interfaces GitHub/GitLab.

A:

Utilisez 'git commit --no-verify' ou '-n'. Cela contourne les hooks pre-commit et commit-msg. Avec modération - les hooks existent pour préserver la qualité du code.

A:

Oui, utilisez 'git commit --allow-empty -m "message"'. Pratique pour déclencher des pipelines CI/CD ou marquer des jalons dans l’historique sans modifier le code.