Section 11.1.5 : Git — Versionner son code
🎯 Objectif pédagogique
Comprendre le versionnement de code avec Git : initialiser un dépôt, sauvegarder des versions (commits), naviguer dans l'historique, et annuler des erreurs. Vous serez capable de protéger votre travail et de comprendre l'évolution de votre code dans le temps.
Le cauchemar de Marc sans Git
Avant de découvrir Git, Marc nommait ses fichiers ainsi :
rapport-final.xlsx
rapport-final-v2.xlsx
rapport-final-v2-CORRIGE.xlsx
rapport-final-v3-DEFINITIF.xlsx
rapport-final-v3-DEFINITIF-VRAIMENT.xlsx
Git résout ce problème élégamment : au lieu de copier des fichiers, vous photographiez l'état du projet à un instant T. Chaque photo (commit) est datée, commentée, et vous pouvez revenir à n'importe laquelle.
Les concepts fondamentaux
- →Working Directory : vos fichiers dans VS Code
- →Staging Area : fichiers préparés pour le prochain commit (
git add) - →Repository : historique complet de tous vos commits (local)
- →Remote : copie en ligne (GitHub) — sauvegarde + collaboration
Analogie de Marc : "Working = je rassemble les documents. Staging = je les mets dans la boîte. Commit = je scelle la boîte avec une étiquette. Push = j'envoie la boîte."
Installer Git
# Windows
winget install Git.Git
# macOS
brew install git
# Linux
sudo apt install git
# Vérification
git --version # git version 2.44.x+
Configuration initiale (une seule fois) :
git config --global user.name "Marc Dupont"
git config --global user.email "marc.dupont@email.com"
git config --global init.defaultBranch main
git config --global core.editor "code --wait"
Le workflow Git quotidien
1. Initialiser un dépôt
mkdir mon-projet && cd mon-projet
git init
# → Initialized empty Git repository in .../mon-projet/.git/
git status
# → On branch main, No commits yet
2. Premier commit
echo "# Mon Projet" > README.md
git status # Untracked files: README.md
git add README.md # Ou : git add .
git status # Changes to be committed: new file: README.md
git commit -m "feat: initial commit avec README"
3. Le cycle quotidien
# 1. Coder...
# 2. Voir ce qui a changé
git status # Fichiers modifiés
git diff # Détail des changements
# 3. Ajouter les changements
git add . # Tout ajouter
# 4. Committer
git commit -m "feat: ajout du formulaire de contact"
# 5. Voir l'historique
git log --oneline
# → a1b2c3d feat: ajout du formulaire de contact
# → 9e8f7d6 feat: initial commit avec README
Écrire de bons messages de commit
| ❌ Mauvais | ✅ Bon |
|---|---|
fix | fix: correction du calcul de TVA |
update | feat: ajout du mode sombre |
wip | refactor: extraction du validateur |
changes | docs: ajout des instructions d'installation |
Convention Conventional Commits :
- →
feat:nouvelle fonctionnalité - →
fix:correction de bug - →
docs:documentation - →
style:formatage - →
refactor:restructuration - →
test:ajout de tests - →
chore:maintenance
Annuler des erreurs
# Annuler les modifications non committées
git checkout -- fichier.js
# Retirer du staging
git reset HEAD fichier.js
# Annuler le dernier commit (garde les fichiers)
git reset --soft HEAD~1
# Voir un ancien commit
git log --oneline
git show a1b2c3d
git reset --hard = destruction
git reset --hard supprime définitivement les modifications non committées. Utilisez-le uniquement si vous êtes sûr. Marc a perdu 2 heures de travail. Règle d'or : committez toutes les 30-60 minutes.
Le .gitignore
Certains fichiers ne doivent jamais être versionnés :
# .gitignore
node_modules/ # Dépendances npm (trop lourdes)
.env # Secrets (clés API, mots de passe !)
__pycache__/ # Cache Python
*.pyc # Fichiers compilés Python
.DS_Store # Fichiers macOS
dist/ # Build output
Jamais de secrets dans Git
Ne versionnez JAMAIS de clés API ou mots de passe. Si un .env est committé, le secret est compromis — des bots scannent GitHub en permanence. Marc a publié une clé OpenAI par erreur : 200$ de facture en 3 heures.
🏋️ Exercice pratique (20 minutes)
# 1. Créer et initialiser
mkdir git-practice && cd git-practice
git init
# 2. Premier commit
echo "# Exercice Git" > README.md
git add . && git commit -m "feat: initial commit"
# 3. Ajouter du contenu
echo "<h1>Hello Git</h1>" > index.html
echo "body \{ font-family: sans-serif; \}" > style.css
git add . && git commit -m "feat: ajout page HTML et CSS"
# 4. Modifier et observer
echo "<p>Je pratique Git !</p>" >> index.html
git diff
git add . && git commit -m "feat: ajout paragraphe"
# 5. Historique
git log --oneline
# 6. Créer .gitignore
echo "node_modules/" > .gitignore
echo ".env" >> .gitignore
git add . && git commit -m "chore: ajout .gitignore"
Marc : "Mon premier commit, c'est comme mon premier ordre de bourse. Sauf qu'ici, on peut annuler."
Quelle est la différence entre git add et git commit ?
Marc a committé son fichier .env avec des clés API. Que doit-il faire ?
Quelle convention est recommandée pour les messages de commit ?