GitHub

Ingénieur·e DevOps · 01

Git et GitHub

Leçons de ce module ▾

Ingénieur·e DevOps · Module 01 · Fondations

Les commits et le graphe d'historique

Leçon 1 sur 4

  1. 01Les commits et le graphe d'historique
  2. 02Branches et fusions
  3. 03Dépôts distants : clone, fetch, push, pull
  4. 04Pull requests et revue de code

La plupart des gens apprennent Git comme une liste de commandes à mémoriser. Construisons plutôt le modèle mental d'abord : une fois que vous comprenez ce qu'est un commit, chaque commande devient évidente.

Un commit est un instantané

Un commit n'est pas une liste de modifications. C'est un instantané complet de votre projet à un moment précis, accompagné de quelques métadonnées :

  • un hash unique qui l'identifie, comme a1f3c9e
  • l'auteur et la date
  • un message qui explique pourquoi la modification a été faite
  • un pointeur vers son parent — le commit juste avant lui

Ce dernier point est la clé. Comme chaque commit pointe vers son parent, les commits s'enchaînent les uns aux autres.

commit 1a1f3c9einitcommit 2b7c2d41add READMEcommit 3c93e0f2add CIcommit 4d4a8b17fix typo
Chaque commit pointe vers son parent. HEAD est sur le plus récent.

Vos premiers commits

Chaque commit passe par les deux mêmes étapes : indexer (stage) les modifications voulues, puis les valider (commit).

$ git initInitialized empty Git repository in /home/you/app/.git/$ git add README.md$ git commit -m "init"[main (root-commit) a1f3c9e] init 1 file changed, 3 insertions(+)

L'index vous permet de choisir exactement ce qui entre dans un instantané, même si vous avez modifié plusieurs fichiers.

Lire le graphe d'historique

git log remonte la chaîne, du commit le plus récent jusqu'au premier :

$ git log --oneline --graph* d4a8b17 (HEAD -> main) fix typo* c93e0f2 add CI* b7c2d41 add README* a1f3c9e init

Deux étiquettes comptent ici :

  • main est une branche — simplement un nom mobile qui pointe vers un commit.
  • HEAD indique où vous êtes en ce moment. Il pointe généralement vers une branche.

Quand vous faites un commit, Git crée le nouvel instantané, lui donne le commit courant comme parent et avance la branche. C'est tout ce que fait un commit.

Dans la prochaine leçon, nous ajouterons une deuxième branche au graphe — et verrons ce qui se passe quand deux lignes d'historique se rejoignent.