All guides
IntermediateSelf-pacedFree GuideSection 5/95

Git — Versionner son code

Practise development foundations: programming, web, APIs, data and AI tools. Work through sections and exercises to build your first projects.

The full lessons for this course are currently available in French. Use the section menu to navigate the French course.

💡

Free content, available without an account. Tools and models change: use the current model guide to check their versions. Models and sources

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

Loading diagram…
  1. →Working Directory : vos fichiers dans VS Code
  2. →Staging Area : fichiers préparés pour le prochain commit (git add)
  3. →Repository : historique complet de tous vos commits (local)
  4. →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
fixfix: correction du calcul de TVA
updatefeat: ajout du mode sombre
wiprefactor: extraction du validateur
changesdocs: 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."

Quick Check

Quelle est la différence entre git add et git commit ?

Quick Check

Marc a committé son fichier .env avec des clés API. Que doit-il faire ?

Quick Check

Quelle convention est recommandée pour les messages de commit ?

Your progress

Progress is self-reported and stored in your browser. The final completion record is not a qualification or an independent assessment.

View progress and completion record

Learn AI, from prompts to agents

15 free guidesQuizzes, diagrams and workshopsNo account needed

One practical AI workflow in your inbox

Methods, resources and new exercises. Free, unsubscribe at any time.