Enregistrer des commits atomiques
Objectif : Découper les modifications du site en commits cohérents et vérifier leur contenu avant de les enregistrer.
Une fonctionnalité peut toucher plusieurs fichiers, et un même fichier peut contenir des changements sans rapport entre eux. Si vous enregistrez tout en bloc, il devient difficile de comprendre, de relire ou de corriger un commit. Vous allez sélectionner les changements utiles à la section « Nouveaux guides », vérifier leur contenu, puis les enregistrer dans un commit cohérent.
Vous partez de la branche `feature/nouveaux-guides`, créée à la leçon précédente, avec un dépôt propre. Après avoir modifié `index.html` et `style.css` pour ajouter la section, examinez d’abord les changements avec `git diff`. Cette commande affiche les modifications non préparées : elle vous permet de repérer les ajouts, les suppressions et les éventuels changements qui ne concernent pas la fonctionnalité.
Sélectionner les changements à enregistrer
Un commit atomique regroupe des changements qui contribuent à un objectif cohérent et peuvent être compris ensemble. Ici, le balisage de la section dans `index.html` et les règles qui lui permettent de s’afficher dans `style.css` font partie de la même fonctionnalité. En revanche, une correction indépendante ou une modification provisoire ne doit pas être glissée dans ce commit simplement parce qu’elle se trouve dans l’un de ces fichiers.
La zone de préparation contient précisément les changements qui seront inclus dans le prochain commit. Plutôt que d’y placer immédiatement un fichier entier, utilisez `git add -p` pour examiner les modifications par parties, appelées hunks. Pour chaque partie, vous choisissez si elle doit être préparée ; les autres restent dans votre arbre de travail et ne seront pas incluses dans le commit.
git diff
git add -p index.html
git add -p style.cssLors de chaque `git add -p`, Git affiche un hunk et une question interactive. Répondez `y` pour le préparer, `n` pour le laisser de côté, ou `q` pour terminer la sélection. Si un hunk rassemble plusieurs changements distincts, `s` demande à Git de le découper lorsque c’est possible ; vous pourrez alors sélectionner les parties séparément.Contrôler le contenu du commit
Avant l’enregistrement, contrôlez le contenu de la zone de préparation avec `git diff --staged`. La commande affiche les changements qui seront réellement enregistrés, contrairement à `git diff`, qui montre les changements encore non préparés. Vérifiez que le balisage et les styles sélectionnés correspondent bien à la section, et qu’aucune suppression inattendue ou modification sans rapport n’apparaît.
git diff --staged
git status`git diff --staged` affiche les modifications sélectionnées pour le prochain commit. `git status` indique ensuite quels fichiers sont préparés et s’il reste d’autres changements non préparés. Si le diff contient une partie incorrecte, retirez le fichier de la zone de préparation avec `git restore --staged <fichier>`, puis refaites la sélection avec `git add -p`. Cette commande conserve les modifications dans le fichier ; elle ne les annule pas.Lorsque le diff est cohérent, enregistrez-le avec un message court qui décrit l’action accomplie, par exemple `Ajoute la section des nouveaux guides`. Un message utile nomme le changement plutôt que de résumer votre intention personnelle. Le commit est alors créé à partir du contenu préparé, pas automatiquement à partir de toutes les modifications présentes dans les fichiers.
git commit -m "Ajoute la section des nouveaux guides"
git status[feature/nouveaux-guides a1b2c3d] Ajoute la section des nouveaux guides
2 files changed, 12 insertions(+)
On branch feature/nouveaux-guides
nothing to commit, working tree cleanLe résumé chiffré du commit est indicatif : le nombre de lignes dépend du contenu exact que vous avez écrit. Si vous avez volontairement laissé des changements hors sujet dans l’arbre de travail, `git status` les signalera au lieu d’indiquer un dépôt propre ; ils ne sont pas inclus dans le commit. Vous pourrez les examiner et les enregistrer séparément, dans un commit ayant son propre objectif cohérent.
À retenir
- Un commit atomique rassemble des changements cohérents autour d’un même objectif.
- `git add -p` vous permet de sélectionner les changements hunk par hunk.
- `git diff --staged` vérifie ce qui sera enregistré ; `git diff` montre ce qui reste à préparer.
- Donnez au commit un message qui décrit clairement le changement enregistré.