Skip to content
Commencer

Le Cycle de Vie d'un Commit

SlidesPDFPPTX
Niveau : Beginner
Durée : 1h30

Prérequis

  • Avoir initialisé un dépôt (Atelier 03)
  • Avoir configuré user.name et user.email (Atelier 02)
  • Savoir créer et éditer des fichiers

Objectifs d'apprentissage

  • Expliquer les trois zones de Git (Working Directory, Staging Area, Local Repository)
  • Utiliser git add, git diff, git commit et leurs variantes
  • Lire l'historique avec git log, git show et les options --oneline --graph
  • Rédiger des messages Conventional Commits et éviter les secrets dans l'historique

Les trois zones de Git — le cœur du modèle

Section titled “Les trois zones de Git — le cœur du modèle”

Git ne sauvegarde pas directement vos fichiers. Il les fait passer par 3 zones :

  1. Working Directory — vos fichiers réels sur disque (VS Code, etc.).
  2. Staging Area (index) — zone de préparation : vous choisissez exactement ce qui part.
  3. Local Repository (.git) — base où les commits (snapshots) sont stockés.

Working Directory

Espace de travail local

README.md

Staging Area

Zone d’index temporaire

README.md

Local Repository

Base de données (.git)

Commit (C1)

git add

git commit

<pre dir="ltr" class="mermaid">flowchart LR A[Working Directory&lt;br/&gt;fichiers modifiés] --&gt;|git add| B[Staging Area&lt;br/&gt;index] B --&gt;|git commit| C[Local Repository&lt;br/&gt;commit C1] C --&gt;|git log| D[Historique]</pre>

Voir les changements : git status & git diff

Section titled “Voir les changements : git status & git diff”

Avant d’ajouter, regardez :

Terminal window
git status
# On branch main
# Changes not staged for commit:
# modified: README.md
# Untracked files:
# app.js
git status --short
# M README.md
# ?? app.js
git status -u
git status --ignored

git diff = quoi ?

diff sans option = non stagé. diff --staged = stagé prêt à committer.

Quand l'utiliser ?

Toujours avant git add et avant git commit pour relire.

Commandes à exécuter

bash
# Cliquez sur les commandes à gauche pour les exécuter dans le simulateur
hashcode-academy:~$_

Commande Effet
git add README.md Ajoute un fichier
git add . Ajoute tout le dossier courant (récursif)
git add -A Ajoute tout le dépôt (même hors dossier courant)
git add -p Patch — choisissez morceau par morceau (y/n)
git add -u Ajoute les suivis modifiés/supprimés (pas les nouveaux)
Terminal window
git rm --cached README.md # retire de l'index → redevient Untracked (fichier gardé)
git restore --staged README.md # unstage les modifications (le fichier reste suivi)
git mv old.js new.js # renommage suivi

Commandes à exécuter

bash
# Cliquez sur les commandes à gauche pour les exécuter dans le simulateur
hashcode-academy:~$_

Terminal window
git commit -m "feat: add login page"
Terminal window
git commit
# → ouvre $EDITOR (VS Code, vim, nano)
# Ligne 1 : titre (50 chars)
# Ligne vide
# Lignes suivantes : corps détaillé
Terminal window
git commit -v # montre le diff dans l'éditeur
git commit -a -m "fix: typo" # add + commit des fichiers suivis (pas les nouveaux)
git commit --amend -m "nouveau message" # corrige le dernier commit (pas encore pushé)
git commit --amend --no-edit # garde le message, corrige le contenu
git commit --allow-empty -m "chore: trigger CI"

Consulter l’historique : git log & git show

Section titled “Consulter l’historique : git log & git show”
Terminal window
git log
# hash, Author, Date, message complet
git log --oneline
# 4f82d2c feat: initial commit
# a1b2c3d docs: update README
git log --oneline --graph --all --decorate
# * a1b2c3d (HEAD -> main) docs: update README
# * 4f82d2c feat: initial commit
git log --stat
# README.md | 1 +
# 1 file changed...
git log -p
# patch complet
git log --since="2 days ago" --until="today"
git log --author="Aïda"
git log --grep="feat"
Terminal window
git show
# dernier commit
git show HEAD
git show a1b2c3d
git show HEAD~1

Commandes à exécuter

bash
# Cliquez sur les commandes à gauche pour les exécuter dans le simulateur
hashcode-academy:~$_

Un bon message = lisible par humain + exploitable par outil (changelog auto, semver).

<type>(<scope>): <sujet à l'impératif>
[corps]
[footer]
Préfixe Usage Exemple
feat Nouvelle fonctionnalité feat: add dashboard
fix Correction bug fix: resolve login redirect
docs Documentation docs: update README
style Formatage style: format with prettier
refactor Refacto sans changement fonctionnel refactor: simplify auth
perf Performance perf: cache user lookup
test Tests test: add unit for login
chore Maintenance chore: update deps
revert Annulation revert: feat: add login

Les 8 premiers types sont ceux de la spec Conventional Commits. Pour la sécurité, utilisez fix avec un scope : fix(security): sanitize inputs.

❌ "modif" / "fix" / "update" / "changements divers"
✅ "feat(auth): add JWT refresh flow"
✅ "fix(api): handle null user in /me"
✅ "docs: add install steps for Windows"

Faites

  • Petits commits atomiques (1 logique = 1 commit) - git status + git diff avant chaque commit - Messages à l’impératif présent

Évitez

  • git commit -m "fix" sans contexte - git add . aveugle avec secrets - git commit -a qui masque l’index

Question

Quelles sont les 3 zones Git ?

Cliquer pour révéler la réponse
Réponse

Working Directory (fichiers), Staging Area (index), Local Repository (.git/commits).

Cliquer pour voir la question
Question

Quelle différence entre git diff et git diff --staged ?

Cliquer pour révéler la réponse
Réponse

diff = Working vs Staging (non stagé). --staged = Staging vs dernier commit.

Cliquer pour voir la question
Question

Quelle commande stage un fichier morceau par morceau ?

Cliquer pour révéler la réponse
Réponse

git add -p (patch, répond y/n par hunk).

Cliquer pour voir la question
Question

Comment corriger le dernier commit pas encore pushé ?

Cliquer pour révéler la réponse
Réponse

git commit --amend -m 'nouveau message' ou --no-edit pour garder le message.

Cliquer pour voir la question
Question

Quelle commande log compacte + graphe ?

Cliquer pour révéler la réponse
Réponse

git log --oneline --graph --all --decorate

Cliquer pour voir la question
Question

Quel préfixe pour une nouvelle fonctionnalité ?

Cliquer pour révéler la réponse
Réponse

feat: (ex: feat: add login page)

Cliquer pour voir la question
Question

Que ne jamais committer ?

Cliquer pour révéler la réponse
Réponse

Secrets : .env, clés API, mots de passe — les mettre dans .gitignore avant.

Cliquer pour voir la question
Question

Quelle commande retire un fichier de l'index sans le supprimer ?

Cliquer pour révéler la réponse
Réponse

git rm --cached <file> ou git restore --staged <file>

Cliquer pour voir la question

1. Quelles sont les trois zones principales de Git ?

2. Quelle commande affiche les diffs déjà stagés ?

3. Quel est le bon message Conventional Commit ?

4. Que ne devez-vous JAMAIS inclure dans un commit ?

5. Comment corriger le message du dernier commit (pas pushé) ?


Terminal window
# Zones
git status
git status --short
git diff
git diff --staged
git diff HEAD
# Add
git add README.md
git add .
git add -A
git add -p
git add -u
git rm --cached <file>
git restore --staged <file>
# Commit
git commit -m "feat: add login"
git commit -v
git commit -a -m "fix: typo"
git commit --amend -m "corrige message"
git commit --amend --no-edit
# Log
git log
git log --oneline
git log --oneline --graph --all --decorate
git log --stat
git log -p
git log --since="yesterday"
git log --grep="feat"
git show
git show HEAD
git show a1b2c3d

Votre Progression0%


Vous savez enregistrer l’historique. Apprenons à isoler les fonctionnalités sans casser main : les branches.

Étape suivante : Les Branches

HashCode Workshops
Part of the JoinHashCode ecosystem

Ctrl + K Rechercher dans les workshops