Voici la situation exacte de ce guide : dans mon-premier-site, vous allez modifier index.html et style.css en même temps. Mais pour votre prochain commit, vous ne voulez enregistrer que la modification de index.html, parce que le style n'est pas encore terminé et que vous préférez le committer séparément, une fois qu'il sera propre. C'est exactement le genre de situation que git add permet de gérer.

Ce qu'est la staging area

La staging area, aussi appelée « index » dans la documentation de Git, est une zone de préparation. Vous pouvez vous la représenter comme une table sur laquelle vous posez uniquement les changements que vous voulez inclure dans la prochaine « photo » de votre projet, c'est-à-dire le prochain commit. Modifier un fichier ne le pose pas automatiquement sur cette table : c'est git add qui l'y dépose, un fichier ou une modification à la fois.

Cette image a une limite qu'il faut connaître : contrairement à une vraie table, la staging area ne se vide pas quand vous ajoutez un nouvel élément. Elle garde tout ce que vous y avez posé jusqu'à ce que vous fassiez le commit, qui vide alors la table pour la prochaine fois.

Modifiez deux fichiers

Ouvrez index.html et remplacez le contenu de la balise h1 pour qu'il soit plus accueillant.

Puis ouvrez style.css et ajoutez une première règle, par exemple pour donner une couleur de fond à la page.

Enregistrez les deux fichiers, puis revenez au terminal ouvert dans mon-premier-site et regardez ce que Git observe.

Comme aucun de ces trois fichiers n'a jamais été commité, Git les considère tous comme « non suivis », qu'ils viennent d'être créés ou modifiés : à ce stade du projet, il ne fait pas encore de différence entre les deux. Cette distinction entre « non suivi » et « modifié » deviendra visible à partir du moment où un premier commit existera, ce qui arrivera dans le prochain guide.

Préparer un seul fichier avec git add

Ajoutez uniquement index.html à la staging area, en tapant son nom explicitement.

Cette commande n'affiche rien par défaut, ce qui est normal. Pour voir son effet, relancez git status.

Regardez bien la différence avec le résultat précédent. Une nouvelle section est apparue, « Changes to be committed » : c'est votre staging area, et elle contient exactement un fichier, index.html. Les deux autres fichiers, README.md et style.css, sont toujours listés dans « Untracked files », inchangés : git add index.html n'a touché qu'à ce que vous lui avez explicitement demandé, rien d'autre.

C'est précisément ce comportement qui rend git add utile : vous pouvez avoir plusieurs fichiers modifiés en même temps sur votre disque, et choisir, commit après commit, lesquels regrouper ensemble. Un commit qui mélange une correction de texte et un changement de couleur non lié est plus difficile à relire plus tard qu'un commit qui ne fait qu'une seule chose claire.

Préparer ensuite le second fichier

Le style n'est pas encore prêt à être enregistré séparément dans ce guide : vous le committerez dans le prochain chapitre, avec le README. Mais pour vérifier que vous maîtrisez la commande, ajoutez maintenant style.css à son tour, puis observez le résultat.

Les deux fichiers sont maintenant dans « Changes to be committed », prêts pour le prochain commit. Seul README.md reste encore non suivi. C'est exactement l'état dans lequel vous terminerez ce guide : vous committerez les deux fichiers préparés dans le guide suivant.

Retirer un fichier de la staging area

Il arrive de se raviser après un git add. Le message affiché par Git vous donne d'ailleurs directement la solution : git restore --staged, suivi du nom du fichier, le retire de la staging area sans toucher à son contenu sur le disque. Le fichier repasse simplement dans l'état « modifié, non préparé ».

Ce n'est pas une commande dangereuse : elle ne supprime jamais votre travail, elle change seulement ce qui est sélectionné pour le prochain commit.

Erreur fréquente

Beaucoup de tutoriels commencent directement par git add ., qui prépare tous les fichiers modifiés du dossier d'un coup. Tant que vous débutez, évitez ce raccourci : ajoutez les fichiers par leur nom, pour être certain de savoir exactement ce que contiendra votre prochain commit. Vous pourrez utiliser git add . plus tard, une fois cette habitude de vérification bien installée.

Vérifiez que vous avez compris

Reprenons la situation de ce guide : vous avez modifié style.css, mais vous n'avez pas encore tapé git add style.css. Ce fichier sera-t-il automatiquement inclus si vous lancez git commit maintenant ?

Non. Seuls les fichiers présents dans « Changes to be committed » au moment du commit sont enregistrés. Un fichier modifié mais non préparé reste en dehors du commit, même si sa modification existe bien sur votre disque.