Aller au contenu principal

Prise en main de Git — Chapitre 1 / 4

Comprendre le modèle Git

Avant de taper des commandes, il faut comprendre comment Git fonctionne. Dans ce chapitre, on va comparer Git à un cahier de photographe. Après cette lecture, Git ne sera plus une boîte noire pour toi.

Chapitre 1 / 4

Étape 01 / 12

L'analogie : le cahier de photographe

Git peut faire peur au début : des commandes bizarres, du vocabulaire anglais, des schémas qui ressemblent à des plans de métro. Mais derrière tout ça se cache une idée très simple. Pour la comprendre, on va utiliser une image qui va nous accompagner pendant tout le chapitre : un photographe et son cahier.

Imagine un photographe qui documente un projet. Il prend des photos sur son appareil, il en sélectionne quelques-unes qu'il juge importantes, puis il les colle sur une page de son cahier pour garder une trace datée de son travail. Le lendemain, il recommence : nouvelle page, nouvelles photos. Au fil du temps, son cahier devient l'histoire complète du projet, page après page.

Git fonctionne exactement comme ça — sauf qu'à la place des photos, ce sont tes fichiers de code, et qu'à la place du cahier, c'est ton ordinateur. Chaque geste du photographe a son équivalent dans Git. Voici les correspondances à retenir :

📷

Ton appareil photo

= Working directory (ton dossier de travail)

🗂️

Le plateau de sélection

= Staging area (les fichiers prêts à être sauvegardés)

📖

Le cahier

= Repository (l'historique de tes sauvegardes)

📄

Une page du cahier

= Un commit (un snapshot complet de tes fichiers)

🔖

Un marque-page

= Une branche (un pointeur vers une page)

👆

La page ouverte

= HEAD (la page que tu lis en ce moment)

Maintenant, à toi de jouer — relie chaque élément à son équivalent Git :

📷 Ton appareil photo
Working directory (ton dossier de travail)
🗂️ Le plateau de sélection
Staging area (fichiers prêts à sauvegarder)
📖 Le cahier
Repository (l'historique de tes sauvegardes)
📄 Une page du cahier
Un commit (un snapshot complet)
🔖 Un marque-page
Une branche (un pointeur vers une page)
👆 La page ouverte
HEAD (la page que tu lis)

Étape 02 / 12

Pourquoi Git existe

Avant de plonger dans les commandes, posons-nous la vraie question : pourquoi a-t-on inventé un outil comme Git ?

Quand tu travailles sur un projet, tu modifies des fichiers en permanence. Sans outil adapté, tu finis vite avec des dossiers du genre projet_final, projet_final_v2, projet_VRAIMENT_final. Impossible de savoir qui a changé quoi, ni de revenir proprement à une version qui marchait il y a trois jours.

Un gestionnaire de versions (en anglais : version control) résout ce problème. Il garde l'historique complet de ton projet : tu peux revenir à n'importe quel état passé, voir exactement qui a modifié quoi et quand, et travailler à plusieurs sans écraser le travail des autres. Git est aujourd'hui le gestionnaire de versions le plus utilisé au monde.

Git a été créé en 2005 par Linus Torvalds — le créateur de Linux. Il avait besoin d'un outil capable de gérer un énorme projet de code, sur lequel des milliers de personnes contribuent en même temps, partout dans le monde, et sans dépendre d'un serveur central.

Avant Git, les développeurs utilisaient des outils comme SVN ou CVS. Ces outils avaient un défaut majeur : ils avaient besoin d'un serveur central. Si ce serveur tombait en panne — ou si tu n'avais pas internet — plus personne ne pouvait enregistrer son travail.

💡 Mot clé : distribué

Git est distribué. Cela veut dire que chaque personne a une copie complète du projet sur sa machine. C'est comme si chaque photographe avait son propre cahier complet. Pas besoin de connexion internet pour travailler.

Avant Git, avec des outils comme SVN, si le serveur central tombait en panne, plus personne ne pouvait travailler. Vrai ou faux ?

Point important

Git n'est pas GitHub. Git est l'outil qui gère les versions de ton code. GitHub est un site web qui héberge des projets Git. Tu peux utiliser Git sans jamais aller sur GitHub.Comprendre la différence Git vs GitHub →

Étape 03 / 12

Snapshot : la vraie nature de Git

💡 Mot clé : snapshot

Un snapshot est une photo complète de tous tes fichiers à un moment précis. Dans notre cahier de photographe, chaque page est un snapshot. La page montre toutes les photos du projet, pas seulement les nouvelles.

C'est la idée la plus importante du chapitre, alors prenons le temps. La plupart des anciens systèmes (comme SVN) enregistrent les différences : « à la ligne 3, remplace Hello par Bonjour ». Pour reconstruire la version d'aujourd'hui, ils doivent rejouer toutes les modifications depuis le tout début — c'est lent, et fragile si une seule différence est corrompue.

Git fait l'inverse. À chaque commit, il prend une photo complète de tous tes fichiers, comme une page de cahier qui montre l'intégralité du projet à cet instant. Pour retrouver une version, il n'a rien à recalculer : il ouvre directement la bonne page. Regarde la différence :

Autres systèmes (SVN)

Fichier : index.html
v1Contenu initial
diff- Hello + Bonjour
diff+ Ajouter le footer
diff- Bonjour + Bienvenue

Pour voir la version actuelle, il faut rejouer toutes les modifications depuis le début.

Git

Snapshots complets

Commit 1

index.html → "Hello"

Commit 2

index.html → "Bonjour"

style.css → "body { margin: 0 }"

Commit 3

index.html → "Bienvenue"

style.css → "body { margin: 0 }"

footer.html → "Pied de page"

Chaque commit contient tous les fichiers. Accès direct à n'importe quelle version.

Tu te demandes peut-être : « une photo complète à chaque fois, ça ne prend pas une place énorme ? » Bonne question — et non. Si un fichier n'a pas changé, Git ne le recopie pas : il garde juste un lien vers la version précédente. Tu obtiens donc le confort de la photo complète, sans gaspiller d'espace.

À chaque commit, qu'est-ce que Git enregistre réellement ?

Étape 04 / 12

Les 3 zones de travail

Voici sans doute le concept le plus utile de tout le chapitre au quotidien. Git ne sauvegarde pas tes fichiers d'un coup : il les fait passer par 3 zones, l'une après l'autre. Une fois que tu as ces 3 zones en tête, 90 % des commandes Git deviennent logiques.

Reprenons le photographe. Il prend des photos sur son appareil (le Working Directory), il en pose quelques-unes sur un plateau pour choisir lesquelles garder (la Staging Area), puis il colle la sélection sur une page de son cahier (le Repository). Chaque zone a un rôle précis :

📷

Working Directory

Ton dossier de travail

Tu modifies tes fichiers ici

↓ git add

🗂️

Staging Area

Zone de préparation

Tu choisis quoi sauvegarder

↓ git commit

📖

Repository

L'historique

Tes sauvegardes permanentes

1. Working Directory — ton espace de travail

C'est le dossier de ton projet sur ton ordinateur, tel que tu le vois dans ton explorateur de fichiers. Tu y crées, modifies et supprimes des fichiers librement. À ce stade, Git observe mais n'a encore rien sauvegardé.

2. Staging Area — la salle d'attente

Avec git add, tu déposes ici les fichiers que tu veux inclure dans ta prochaine sauvegarde. C'est l'étape qui rend Git puissant : tu peux avoir modifié 10 fichiers et n'en sauvegarder que 3 ensemble, pour des commits propres et cohérents.

3. Repository — le cahier scellé

Avec git commit, Git colle le contenu de la Staging Area sur une nouvelle page de ton cahier. Cette page est permanente : elle rejoint l'historique et tu pourras toujours y revenir, même dans dix ans.

Quelle commande fait passer un fichier du Working Directory à la Staging Area ?

Tu pratiqueras ces commandes en détail au chapitre 2.

Étape 05 / 12

Les objets Git

Git stocke les données sous forme de 4 types d'objets. Voici comment ils s'organisent :

commit

a1b2c3d

"Ajouter la page d'accueil"

Auteur: Alice · 14 fév 2026

↓ contient un tree

tree

d4e5f6a

Liste des fichiers du projet

blob

index.html

"<h1>Hello</h1>"

blob

style.css

"body { ... }"

blob — le contenu d'un fichier

Un blob contient le contenu brut d'un fichier. Il ne contient pas le nom du fichier. C'est comme le contenu d'une lettre sans l'enveloppe.

tree — un dossier

Un tree représente un dossier. Il contient une liste de fichiers (blobs) et de sous-dossiers (autres trees). C'est comme la table des matières d'un livre.

commit — une sauvegarde

Un commit est un snapshot complet de ton projet. Il contient :

  • - Un lien vers un tree (le contenu du projet)
  • - Un message (ce que tu as fait)
  • - Un auteur et une date
  • - Un ou plusieurs parents (les commits précédents)

tag — une étiquette

Un tag est un nom donné à un commit précis. Par exemple : v1.0 ou v2.3. C'est comme mettre un marque-page dans le cahier.

À toi de jouer — relie chaque objet à son rôle :

blob
Le contenu brut d'un fichier
tree
Un dossier : la liste des fichiers
commit
Un snapshot + son message et son auteur
tag
Une étiquette posée sur un commit (v1.0)

Comment Git stocke concrètement les données

Voici ce qui se passe réellement quand tu crées un fichier et tu le commites :

# Tu crées un fichier et tu le commites

$ echo "Hello" > hello.txt

$ git add hello.txt

$ git commit -m "Add hello"

# Git a créé 3 objets :

# 1. Un blob (le contenu du fichier)

$ git cat-file -p ce013

Hello

# 2. Un tree (la liste des fichiers)

$ git cat-file -p 8a9f2

100644 blob ce013 hello.txt

# 3. Un commit (le snapshot + métadonnées)

$ git cat-file -p a1b2c

tree 8a9f2

author Alice 1707900000

Add hello

Tu n'as pas besoin de retenir ces commandes. L'important est de comprendre que Git stocke des objets reliés entre eux : le commit pointe vers un tree, le tree pointe vers des blobs.

Étape 06 / 12

Le hash : la carte d'identité d'un objet

💡 Mot clé : hash SHA

Un hash est un code unique calculé à partir du contenu d'un objet. C'est comme un code-barre unique sur chaque page du cahier. Deux contenus différents donnent toujours deux hash différents.

On vient de voir que Git stocke des objets (blob, tree, commit). Mais comment les retrouve-t-il, sans jamais se tromper, parmi des milliers d'objets ? Grâce au hash.

Un hash, c'est une empreinte digitale calculée à partir du contenu. Git passe le contenu de l'objet dans une fonction mathématique (SHA) qui produit un code de 40 caractères. Ce code a deux propriétés magiques : le même contenu donne toujours le même hash, et le moindre changement (une virgule, un espace) donne un hash complètement différent.

C'est ce qui garantit l'intégrité de ton historique : si une donnée est modifiée, ne serait-ce que d'un caractère, son hash ne correspond plus et Git le détecte immédiatement. En pratique, on utilise souvent juste les 7 premiers caractères. Essaie par toi-même — tape un texte, puis change une seule lettre :

$ git hash-object

0d462e0

Le hash dépend de tout le contenu : une lettre en plus, en moins, ou en majuscule, et le résultat est complètement différent. Mais le même contenu redonne toujours le même hash — c'est ce qui garantit l'intégrité de ton historique.

$ git log --oneline

a1b2c3d Ajouter la page d'accueil

e4f5g6h Premier commit

Le hash garantit que les données sont intactes. Si un seul caractère change dans un fichier, le hash sera complètement différent. Impossible de modifier l'historique sans que Git le détecte.

Étape 07 / 12

Les branches : des marque-pages

💡 Mot clé : branche

Une branche est un nom qui pointe vers un commit. Dans notre cahier, c'est un marque-page. Le marque-page dit : "je suis à cette page". Quand tu ajoutes une nouvelle page, le marque-page se déplace.

Les branches sont ce qui rend Git si puissant pour travailler à plusieurs — ou pour tester une idée sans casser ce qui marche. Mais attention au piège classique : beaucoup de débutants imaginent qu'une branche est une copie de tout le projet. C'est faux, et comprendre pourquoi change tout.

Une branche, c'est juste un petit fichier qui contient le hash d'un commit — littéralement un marque-page qui dit « la dernière page de cette ligne de travail, c'est celle-là ». La créer ne copie rien et est donc instantané, même sur un projet de plusieurs gigaoctets.

Conséquence concrète : tu peux créer une branche pour chaque fonctionnalité, chaque correction de bug, chaque expérience — sans hésiter, sans rien dupliquer. Quand tu ajoutes un commit, le marque-page de ta branche avance tout seul vers la nouvelle page. Et main n'a rien de spécial : c'est une branche comme les autres, juste celle créée par défaut.

# Deux marque-pages dans le cahier

main a1b2c3d (page 3)

feature e4f5g6h (page 5)

HEAD main (tu lis la page du marque-page "main")

Le graphe des branches :

→ C → D → E (feature)

/

A → B → C (main, HEAD)

Concrètement, Git stocke chaque branche comme un fichier dans le dossier .git/refs/heads/ :

$ cat .git/refs/heads/main

a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0

# C'est tout. Un fichier de 40 caractères.

« Créer une nouvelle branche copie tout le code du projet. » Vrai ou faux ?

Tu créeras et fusionneras des branches au chapitre 3.

Étape 08 / 12

Mot clé : HEAD

HEAD est un pointeur qui dit "tu es ici". Dans notre cahier, c'est la page que tu as ouverte. En général, HEAD pointe vers une branche (un marque-page).

Si une branche est un marque-page, HEAD est ton doigt posé sur le marque-page que tu lis en ce moment. Comme tu peux avoir plusieurs marque-pages (plusieurs branches) dans le cahier, Git a besoin de savoir lequel est « actif » : c'est exactement le rôle de HEAD.

La plupart du temps, HEAD pointe vers une branche, et cette branche pointe vers un commit. Quand tu fais un nouveau commit, la branche avance d'une page… et HEAD la suit automatiquement. Tu restes toujours « à la dernière page » de ta branche :

# Avant le commit :

HEAD → main → a1b2c3d

# Après le commit :

HEAD → main → f7a8b9ca1b2c3d

Il existe un cas particulier que tu croiseras tôt ou tard : le detached HEAD(« HEAD détaché »). Cela arrive quand HEAD pointe directement sur un commit, sans passer par une branche — par exemple quand tu fais git checkout sur un vieux commit pour regarder ce qu'il contenait.

⚠️ Attention : en mode detached HEAD, tu peux te balader sans risque pour regarder. Mais si tu fais des commits là, aucun marque-page ne pointe dessus : dès que tu repars sur une branche, ils deviennent très difficiles à retrouver. Pour conserver ton travail, crée une branche avant de commiter.

Étape 09 / 12

Le graphe Git

💡 Mot clé : graphe (DAG)

L'historique de Git forme un graphe. Chaque commit pointe vers son parent (le commit précédent). C'est comme un arbre généalogique : chaque enfant connaît ses parents.

On a vu les commits, les branches et HEAD. Si on prend du recul, tous ces objets s'assemblent en une seule grande structure : l'historique de ton projet. Et cet historique n'est pas une simple liste — c'est un graphe.

Chaque commit garde un lien vers son parent : le commit qui le précède. C'est comme un arbre généalogique où chaque enfant connaît ses parents. Ce détail est ce qui permet à Git de toujours pouvoir remonter le temps : depuis n'importe quel commit, il peut reconstituer toute la lignée jusqu'au tout premier.

Quand deux branches se rejoignent (une fusion), le commit de fusion a même deux parents — c'est ce qui crée les « fourches » que tu vois dans le graphe. On appelle ça un DAG (graphe orienté sans cycle) : on avance toujours du passé vers le présent, jamais en boucle.

Tu peux visualiser ce graphe à tout moment avec cette commande :

$ git log --graph --oneline --all

* f7a8b9c (HEAD → main) Merge branch 'feature'

|\

| * d4e5f6a (feature) Add feature

|/

* a1b2c3d Initial commit

Dans le graphe Git, chaque commit pointe vers… ?

Étape 10 / 12

Local vs Distant

Jusqu'ici, tout se passait sur ta machine. Et c'est une force de Git : ton dépôt, avec tout son historique, vit en entier sur ton ordinateur. C'est ton dépôt local. Tu peux commiter, créer des branches, consulter l'historique… même dans un avion, sans aucune connexion.

Mais pour travailler en équipe (ou simplement sauvegarder ailleurs que sur ton disque dur), il te faut un point de rendez-vous commun : un dépôt distant(en anglais : remote). C'est une copie du projet hébergée sur un serveur, par exemple sur GitHub, GitLab ou Bitbucket.

Dans notre analogie, c'est comme si chacun avait son propre cahier de photographe, et qu'il existait en plus un grand cahier partagé au milieu du bureau. Deux commandes servent à synchroniser ton cahier avec le cahier partagé :

git push

Tu envoies tes nouvelles pages vers le cahier partagé

git pull

Tu récupères les nouvelles pages du cahier partagé

git push : envoyer tes commits

Quand tu as fait un ou plusieurs commits en local, tu peux les envoyer vers le dépôt distant avec git push.

$ git push

# Envoie tes commits locaux vers le dépôt distant

# Les autres membres de l'équipe pourront voir tes changements

git pull : récupérer les nouveautés

Quand d'autres personnes ont poussé des commits sur le dépôt distant, tu peux les récupérer avec git pull. Cette commande fait deux choses : elle télécharge les nouveaux commits (fetch) puis les intègre dans ta branche (merge).

$ git pull

# Récupère les commits distants et les intègre à ta branche

remote: Counting objects: 3, done.

From github.com:user/projet

a1b2c3d..f4e5d6a main → origin/main

Updating a1b2c3d..f4e5d6a

Fast-forward

readme.md | 2 +-

1 file changed, 1 insertion(+), 1 deletion(-)

Bonne pratique

Fais un git pull avant de commencer à travailler. Ça te garantit d'avoir la dernière version du projet. Tu éviteras des conflits inutiles.

Tes collègues ont poussé du nouveau travail sur le dépôt distant. Pour le récupérer chez toi, tu fais… ?

L'important à retenir : tu peux travailler sans connexion internet. Tu synchronises quand tu veux avec push et pull.

Étape 11 / 12

En résumé

Voici comment tous les concepts de ce chapitre s'emboîtent :

1

Tu modifies des fichiers dans le Working Directory

↓ git add
2

Tu prépares les fichiers dans la Staging Area

↓ git commit
3

Git crée un commit (snapshot) dans le Repository

↓ le commit contient
4

Des objets (blob, tree, commit) identifiés par des hash SHA

↓ organisés par
5

Des branches (pointeurs) dont une est active via HEAD

↓ forment
6

Un graphe (DAG) qui est l'historique complet du projet

Erreurs fréquentes

  • Confondre Git et GitHub. Git est l'outil. GitHub est un site web.
  • Croire qu'un commit ne sauvegarde que les modifications. Non, c'est une photo complète (snapshot).
  • Penser que les branches sont des copies du code. Ce sont juste des pointeurs (des marque-pages).
  • Ne pas comprendre que HEAD peut être détaché. Si tu fais un commit sans branche, il peut être perdu.
  • Oublier la staging area. Les fichiers ne sont pas sauvegardés tant que tu ne fais pas git add puis git commit.

Étape 12 / 12

Teste tes connaissances

Avant de passer aux exercices, vérifie que tu as compris les concepts. Clique sur la réponse qui te semble correcte.

Quiz — Chapitre 1

1. Un blob Git contient…

2. Comment Git sauvegarde-t-il tes fichiers ?

3. Qu'est-ce qu'une branche Git ?

4. Quand HEAD est détaché et que tu fais un commit…

Pour aller plus loin

Ce chapitre couvre les fondamentaux du modèle Git. Si tu veux approfondir, voici quelques pistes :

  • SHA-1 vs SHA-256 : Git utilisait SHA-1 pour calculer les hash. Il migre progressivement vers SHA-256, plus sécurisé. Le fonctionnement reste identique.
  • Garbage collection : Git nettoie automatiquement les objets qui ne sont plus référencés par aucune branche ou tag. C'est pour ça qu'un commit en "detached HEAD" peut être perdu.
  • Pro Git : le livre gratuit de référence sur Git (en anglais). Disponible en ligne sur git-scm.com/book.
  • Documentation officielle : git-scm.com/doc pour la référence complète de toutes les commandes Git.

Le chapitre 1 t'a plu ? Continue la formation

Les chapitres 2 à 4 t'attendent — gratuits, directement ici sur le web. Laisse ton email une fois et débloque toute la suite, à ton rythme.

Tu préfères apprendre sur mobile ? La formation complète est aussi dans l'app GitQuest (iOS · Android).

Ton avis compte

Aide-nous à améliorer cette formation en partageant ton retour.

Pour qu'on puisse te répondre si besoin.