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 :
- Ajouter les fichiers à la zone de staging (index) avec
git add
et éventuellementgit rm
pour supprimer des fichiers. - 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