Commiter est l'action de sauvegarder les modifications dans le système de contrôle de version Git, créant un point de sauvegarde dans l'historique du projet. Chaque commit inclut un hash, un auteur, une date et une description des modifications. Selon GitHub Octoverse 2024, plus de 50 millions de commits sont créés chaque jour dans le monde. Commit est l'unité de base du travail avec le versionnage, sans lequel le développement logiciel moderne est impossible.
Points clés
Un commit dans Git est un objet qui stocke l'état des fichiers du projet à un moment donné. Chaque commit contient un instantané de tous les fichiers suivis, une référence au commit parent et des métadonnées. Contrairement à d'autres systèmes de contrôle de version, Git utilise un stockage adressable par contenu — chaque objet est identifié par un hash SHA-1 de son contenu.
Lorsqu'un développeur commit des modifications, Git crée un objet commit qui stocke : un objet tree (structure de fichiers), le hash du commit parent, l'auteur, le committer, la date et le message. Cet objet est immuable — une fois créé, un commit ne peut pas être modifié sans changer son hash. Cette immuabilité garantit l'intégrité de l'historique du projet.
# Stager les modifications et commiter
git add index.html style.css
git commit -m "Fix responsive layout on mobile devices"
# Voir les détails du commit
git log --oneline -3
git show HEAD
# Stager toutes les modifications et commiter en une étape
git commit -a -m "Update dependencies to latest versions"
Les commits forment un graphe acyclique orienté (DAG), où chaque nouveau commit référence le précédent. Cela permet de naviguer dans l'historique, d'annuler des modifications et d'analyser l'évolution de la base de code. Comprendre la structure du DAG Git est la base du travail avancé avec les commits.
Le processus de commit dans Git comprend deux étapes : ajouter les modifications à la zone de staging (index) et créer le commit. La zone de staging permet au développeur de sélectionner les modifications spécifiques qui seront incluses dans le commit, même si de nombreux fichiers ont été modifiés dans le répertoire de travail.
La règle d'atomicité est le principe clé d'un bon commit. Chaque commit doit contenir un changement logique. Si un développeur corrige un bug et refactorise du code — ce sont deux commits différents. Les commits atomiques simplifient la revue de code, l'annulation des modifications et l'analyse de l'historique.
Avant de commiter, il vaut la peine de vérifier : s'il reste dans le code des sorties de débogage, des blocs commentés ou des modifications accidentelles. Pour cela, on utilise la commande git diff --cached, qui montre exactement ce qui sera inclus dans le commit. Une vérification supplémentaire avec git status affiche la liste des fichiers dans la zone de staging.
Le message de commit est la documentation de la modification pour les futurs développeurs. Un bon message répond aux questions : qu'est-ce qui a été modifié et pourquoi. La convention Conventional Commits (équipe Angular, 2016) est devenue un standard pour de nombreux projets et définit le format : type(portée) : description.
| Type | Objectif | Exemple |
|---|---|---|
| feat | nouvelle fonctionnalité | feat(api): add user registration endpoint |
| fix | correction de bug | fix(auth): resolve token refresh issue |
| refactor | refactorisation sans changement de comportement | refactor(core): extract payment validator |
| docs | documentation | docs(readme): update installation guide |
| test | ajout de tests | test(cart): add unit tests for checkout |
Un bon message de commit se compose d'un en-tête (jusqu'à 50 caractères) et d'un corps (optionnel, jusqu'à 72 caractères par ligne). L'en-tête s'écrit à l'impératif : « Add » pas « Added » ni « Adds ». Capitalization et point à la fin de l'en-tête ne sont pas utilisés — c'est une convention internationale de Git.
Un mauvais message : « fix things » ou « update » — il n'apporte aucune information. Dans un mois, un développeur ne pourra pas comprendre ce qui a été exactement modifié et pourquoi. Un bon message : « fix(payment): handle timeout in stripe callback » — il devient immédiatement clair ce qui a été corrigé et où.
Les développeurs, surtout les débutants, commettent souvent des erreurs typiques lors des commits. La plus courante est un commit trop volumineux, qui mélange des dizaines de modifications. Un tel commit ne peut pas être annulé partiellement, et la revue de code devient un supplice.
La deuxième erreur la plus fréquente est un mauvais message de commit. Des messages comme « fix », « update », « changes » ou « wip » ne fournissent pas de contexte aux futurs développeurs. Dans six mois, personne ne se souviendra de ce qui a été exactement corrigé. La règle est simple : imaginez que dans un an vous regardez l'historique en essayant de trouver une modification spécifique.
La troisième erreur est de commiter du code non compilé ou non fonctionnel. Après un commit, le code doit au moins compiler. Ne pas casser la build est une exigence de base pour tout commit dans une branche partagée. Pour cela, la build et les tests sont exécutés avant le commit.
La quatrième erreur est de commiter des données confidentielles. Les clés API, mots de passe et tokens ne doivent pas se retrouver dans l'historique Git. Si un secret a déjà été commité, il ne suffit pas de le supprimer dans un nouveau commit, il faut le supprimer de tout l'historique via git filter-branch ou BFG Repo-Cleaner.
Git fournit des outils pour gérer l'historique des commits. L'un des plus utiles est git commit --amend, qui permet de compléter le dernier commit avec de nouvelles modifications ou de corriger le message. C'est pratique si le développeur a oublié d'inclure un fichier ou a fait une faute de frappe dans le message.
# Corriger le message du dernier commit
git commit --amend -m "fix(auth): correct token validation logic"
# Ajouter un fichier oublié au dernier commit
git add missed-file.txt
git commit --amend --no-edit
# Rebase interactif pour les 3 derniers commits
git rebase -i HEAD~3
Le rebase interactif est un outil puissant pour réécrire l'historique. Il permet de combiner des commits (squash), de changer des messages (reword), de réordonner (reorder) et de supprimer des commits (drop). Cependant, le rebase modifie l'historique, donc il est utilisé uniquement sur les commits locaux qui n'ont pas encore été poussés vers un dépôt distant.
Il existe deux approches pour annuler des commits. git revert crée un nouveau commit qui annule les modifications du précédent — une méthode sûre qui préserve l'historique. git reset supprime des commits de l'historique — dangereux si les commits ont déjà été poussés. Dans le développement en équipe, seul git revert est utilisé pour annuler les commits publiés.
Foire aux questions
Commiter signifie créer un point de sauvegarde pour les modifications dans Git. Le commit enregistre l'état actuel des fichiers dans l'historique du projet avec une description de ce qui a été modifié et pourquoi. Chaque commit a un identifiant unique (hash SHA-1) et fait partie d'une chaîne ininterrompue de modifications.
Il est recommandé de commiter après chaque modification logiquement terminée, même petite. La fréquence optimale est d'un commit par tâche ou correction. Vous ne devez pas commiter toutes les 5 minutes, mais vous ne devez pas non plus accumuler les modifications pendant plusieurs jours sans un seul commit.
Un commit atomique contient un changement logique — une tâche, une correction de bug ou une nouvelle fonctionnalité. Il ne mélange pas différentes modifications dans un même commit. Les avantages des commits atomiques sont : simplicité d'annulation, historique clair et revue de code facile.
Pour annuler un commit publié, utilisez git revert <commit-hash> — il crée un nouveau commit qui annule les modifications. Pour les commits locaux, vous pouvez utiliser git reset HEAD~1, mais seulement si le commit n'a pas encore été poussé. git revert est la méthode sûre pour le travail en équipe.
Oui, avant de le pousser vers un dépôt distant. Utilisez git commit --amend pour modifier le dernier commit ou git rebase -i pour modifier plusieurs commits. Après avoir poussé, il n'est pas recommandé de modifier l'historique — cela peut causer des problèmes aux autres développeurs s'ils ont déjà poussé leurs modifications.
Résumé
Nous développerons une application mobile clé en main
IT Sectr crée des applications iOS et Android pour les startups et les entreprises depuis 2017. Nous vous conseillerons et vous proposerons la meilleure solution.