Aller au contenu principal

Valider son travail (commit)

Une fois le dépôt initialisé, on peut commencer à valider son travail. La validation est un processus en deux étapes :

  1. Ajouter les fichiers à la zone de staging (index) avec git add et éventuellement git rm pour supprimer des fichiers.
  2. Valider les fichiers de l'index avec git commit.

Il est en fait possible de bâtir l'index en plusieurs étapes. Par exemple, d'abord ajouter un fichier, puis d'autres, puis de valider l'ensemble. Si vous perdez le fil de ce qui est dans l'index, vous pouvez toujours utiliser git status pour voir ce qui est prêt à être validé. Voyons tout cela à l'aide d'un exemple.

Exemples de validation

Ajouter des fichiers et valider

Commencez par cloner le dépôt d'exemple :

git clone https://github.com/archambaultv-prof/git-commit.git
cd git-commit

Le dossier contient quatre fichiers : fichierA.txt, fichierB.txt, README.md et .gitignore. Les deux premiers sont vides et .gitignore contient :

password.txt

Commençons par ajouter du contenu dans fichierA.txt :

echo "Astérix le Gaulois" > fichierA.txt

et par créer le fichier password.txt :

echo "secret" > password.txt

Maintenant, regardons l'état du dépôt :

git status
On branch main
Your branch is up to date with 'origin/main'.

Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: fichierA.txt

On note que fichierA.txt a été modifié mais n'est pas encore dans l'index. Le fichier password.txt n'est pas mentionné car il est ignoré par le fichier .gitignore.

On peut ajouter fichierA.txt à l'index avec la commande suivante :

git add fichierA.txt

On peut vérifier l'état du dépôt à nouveau :

git status
On branch main
Your branch is up to date with 'origin/main'.

Changes to be committed:
(use "git restore --staged <file>..." to unstage)
modified: fichierA.txt

Cette fois-ci, fichierA.txt est dans l'index et prêt à être validé. Mais continuons à travailler. Ajoutons plus de contenu dans fichierA.txt :

echo "La Serpe d'or" >> fichierA.txt

En vérifiant l'état du dépôt, on constate que fichierA.txt est à la fois dans l'index et dans le répertoire de travail :

git status
On branch main
Your branch is up to date with 'origin/main'.

Changes to be committed:
(use "git restore --staged <file>..." to unstage)
modified: fichierA.txt

Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: fichierA.txt

Il peut sembler bizarre d'avoir le même fichier dans deux états différents, mais c'est normal. L'index contient la version que nous avons ajoutée pour validation, tandis que le répertoire de travail contient la version actuelle. Si nous validons maintenant, seule la version de l'index sera enregistrée.

Pour valider l'index, on utilise la commande suivante :

git commit -m "Ajout du titre Astérix le Gaulois"

Cette commande enregistre l'état de l'index dans l'historique du dépôt avec le message "Ajout du titre Astérix le Gaulois". On peut vérifier l'historique des validations avec :

git log --oneline

On constate d'abord que le pointeur HEAD pointe vers la nouvelle validation. De plus, si l'on regarde l'état du dépôt, on constate que fichierA.txt n'est plus mentionné dans l'index, car il a été validé et donc n'est plus considéré comme modifié pour l'index. Il est en effet le même que celui de la nouvelle validation. Cependant, il est toujours modifié dans le répertoire de travail, car nous avons ajouté du contenu après l'avoir mis dans l'index.

git status
On branch main
Your branch is ahead of 'origin/main' by 1 commit.
(use "git push" to publish your local commits)

Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: fichierA.txt

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

Restaurer la version de l'index

Si vous souhaitez restaurer la version de l'index dans le répertoire de travail, vous pouvez utiliser la commande git restore :

git restore fichierA.txt

Maintenant, si vous vérifiez l'état du dépôt, vous verrez que fichierA.txt n'est plus modifié dans le répertoire de travail, car il a été restauré à la version de l'index :

git status
On branch main
Your branch is ahead of 'origin/main' by 1 commit.
(use "git push" to publish your local commits)

nothing to commit, working tree clean

Supprimer des fichiers et valider

Il arrive que l'on veuille supprimer des fichiers du dépôt. Pour cela, on utilise la commande git rm suivie du nom du fichier à supprimer. Par exemple, pour supprimer le fichier fichierB.txt, on peut exécuter :

git rm fichierB.txt

Cette commande supprime le fichier du répertoire de travail et de l'index pour la prochaine validation. On peut vérifier l'état du dépôt avec git status :

On branch main
Your branch is ahead of 'origin/main' by 1 commit.
(use "git push" to publish your local commits)

Changes to be committed:
(use "git restore --staged <file>..." to unstage)
deleted: fichierB.txt

On voit que fichierB.txt est marqué comme supprimé et prêt à être validé. Pour valider cette suppression, on utilise la commande suivante :

git commit -m "Suppression de fichierB.txt"

Finalement, on peut vérifier l'historique des validations pour voir que la suppression a bien été enregistrée :

git log --oneline