Git & GitHub : Enregistrer les Modifications (Commits)
Enregistrez des versions cohérentes et traçables de votre projet en créant des commits avec Git.
Commits : valider ses modifications
Qu’est-ce qu’un commit ?
Un commit Git est une capture instantanée (« snapshot ») des modifications indexées dans la staging area.
Ce commit contient une version du code source et pourra par la suite être envoyé au dépôt distant.
L’historique de Git est structuré sous forme d’arborescence de commits : chaque commit pointe vers un commit parent (ou plusieurs après une fusion). Cette représentation visuelle permet de suivre l’évolution du projet au fil du temps.
Chaque commit est constitué de :
- Snapshot : une capture instantanée de l’état des fichiers à un moment donné (correspondant à la staging area, au moment du commit).
- Message : un message descriptif expliquant les modifications effectuées dans le commit (exemple : “Mise en forme de la navbar”)
- Métadonnées (auteur et date du commit) : des métadonnées sont automatiquement associées au commit telles que son auteur (nom + adresse email définie via la commande
git config
) et la date à laquelle il a été généré.
Un commit Git est identifié par un hachage SHA-1
(S
ecure H
ash A
lgorithm 1
) qui est une chaîne hexadécimale de 40 caractères. Ce hachage est généré en fonction des données associées au commit, notamment les modifications apportées aux fichiers, le message de commit, l’auteur, la date du commit et les références aux commits parents.
Voici un exemple de commit :
commit 29a19ffb185f7486d9326d0286f0e27fefc6bc8a (HEAD -> main)
Author: Thibaud d'Arros <[email protected]>
Date: Wed Apr 10 13:29:18 2024 +0200
Ajout du moteur de recherche
Créer un commit
Pour créer un commit, on exécute la commande git commit
, en y précisant un message descriptif associé avec le flag -m
:
git commit -m "Ajout du moteur de recherche"
Modifier le dernier commit
Si vous souhaitez modifier le dernier commit, vous avez la possibilité d’écraser le dernier commit en réexécutant la commande git commit
, mais cette fois-ci avec le flag --amend
.
Deux cas sont alors à distinguer :
Cas n°1 : je souhaite uniquement modifier le message du commit
Cela peut arriver si vous avez effectué une faute d’orthographe, si le message est peu clair, etc. Dans ce cas-là, effectuez directement un :
git commit -m "Mon nouveau message" --amend
Cas n°2 : je souhaite modifier les fichiers du commit
Cela peut arriver si vous avez oublié d’ajouter/de supprimer un fichier dans la staging area ou effectué une modification mineure corrective sur un fichier, après la génération du commit.
Dans ces cas-là :
- Mettez à jour votre staging area classiquement avec les commandes
git add
et/ougit restore --staged
. - Effectuez un nouveau commit avec
--amend
:
git commit -m "Mon message" --amend
Revenir à un commit ultérieur
Le commit actif d’une branche est défini par le HEAD
(la tête) de cette dernière.
Par défaut, le HEAD
d’une branche pointe vers le dernier commit généré.
Dans le cas où vous souhaitez revenir à une version précédente de votre projet, il est alors possible de déplacer le HEAD
de la branche vers un autre commit en faisant usage de la commande git reset
suivie de l’identifiant SHA-1
du commit en question. Cela aura pour effet de modifier l’historique du projet.
git reset <id-commit>
Par exemple : git reset 29a19ffb185f7486d9326d0286f0e27fefc6bc8a
Cette commande va se comporter de 3 manières différentes, en fonction du flag spécifié.
--soft
: Déplacement vers le commit spécifié tout en conservant les modifications dans la staging area. Cela signifie que les modifications ne sont pas perdues et peuvent être réenregistrées.--mixed
: Déplacement vers le commit spécifié en mettant les modifications dans la working directory. Cela signifie que les modifications sont retirées de la zone de mise en scène mais restent dans les fichiers locaux.--hard
: Déplacement vers le commit spécifié et supprime toutes les modifications locales, les ramenant à l’état du commit. Cela signifie que toutes les modifications non enregistrées sont perdues.
Historique
Historique des commits
Si vous souhaitez visualiser l’historique des commits effectués sur la branche courante, vous pouvez exécuter la commande git log
:
git log
Cette commande affichera les commits du plus récent au plus ancien.
Historique de modifications depuis le dernier commit
Il est possible de comparer les modifications non encore indexées (celles qui n’ont pas encore été ajoutées à la staging area) avec le dernier commit généré.
Pour cela, on tape la commande :
git diff
La commande git diff
permet de voir les changements apportés à l’ensemble des fichiers, depuis le dernier commit.
git diff <nom-fichier>
La commande git diff <nom-fichier>
permet de voir les changements apportés à un fichier spécifique, depuis le dernier commit.
Fichier .gitignore
Le fichier caché 📄 .gitignore
est largement utilisé dans un dépôt Git car il permet de spécifier les fichiers et répertoires que vous souhaitez exclure du suivi Git (et donc par extension de vos commits).
Il permet ainsi d’ignorer :
- Des fichiers spécifiques
- Des types de fichiers (Exemple :
.log
,.pdf
…) - Des dossiers spécifiques (et leur contenu par extension)
Cela s’avère très utile pour, par exemple, éviter d’envoyer sur le repo distant :
- Des informations sensibles et/ou personnelles (tel que le contenu d’un fichier
📄 .env
) - Le code source de bibliothèques qui peuvent être générées via des lignes de commande (par exemple le dossier
📂 node_modules
dans l’écosystème JS,📂 vendor
avec le framework Symfony). - Etc.
Voici quelques exemples de règles courantes à mettre dans votre 📄 .gitignore
:
Ignorer un fichier spécifique
nom-du-fichier.txt
Ignorer tous les fichiers avec une extension donnée
Pour ignorer les fichiers ayant l’extension .log
:
*.log
Ignorer un dossier entier
Pour ignorer un répertoire nommé 📂 node_modules
ou encore 📂 vendor
:
node_modules/
vendor/
Le caractère !
avant une règle permet quant à lui d’affiner les règles de filtrage excluant du 📄 .gitignore
un fichier ou répertoire précédemment ignoré.
Dans l’exemple ci-dessous, on ignore tous les fichiers markdown .md
, sauf le fichier 📄 readme.md
.
*.md
!readme.md
Après avoir spécifié les règles de filtrage dans le fichier 📄 .gitignore
, enregistrez-le. Ensuite, effectuez un commit pour ajouter le fichier 📄 .gitignore
au référentiel Git.
git add .gitignore
git commit -m "Ajout du fichier .gitignore"
Dorénavant, les fichiers spécifiés dans 📄 .gitignore
seront automatiquement exclus du prochain commit.
Ainsi, les fichiers et dossiers spécifiés dans 📄 .gitignore
ne seront pas ajoutés à la staging area par un git add
.