Aller au contenu principal

git add & git commit — Staging et sauvegarde des changements

Module 01 60 min

Objectifs de la section

  • Maîtriser la zone de staging avec git add
  • Créer des commits significatifs avec git commit
  • Écrire des messages de commit professionnels
  • Utiliser le staging interactif pour des commits précis

La zone de staging en détail

La zone de staging (aussi appelée index) est le superpouvoir unique de Git par rapport aux anciens systèmes de contrôle de version. Elle vous permet de construire votre commit avec une précision chirurgicale.

Pourquoi la zone de staging existe-t-elle ?

Imaginez que vous avez passé la matinée à travailler sur une fonctionnalité. Vous avez modifié 5 fichiers. Mais vous réalisez :

  • 3 fichiers appartiennent à une fonctionnalité
  • 2 fichiers sont une correction de bug

Sans zone de staging, vous devriez tout commiter ensemble. Avec la zone de staging, vous pouvez créer 2 commits séparés et logiques.


Variantes de git add

Commandes de base

# Ajouter un fichier spécifique
git add README.md

# Ajouter un dossier entier
git add src/

# Ajouter tous les changements dans le répertoire actuel
git add .

# Ajouter tous les fichiers suivis (y compris les fichiers supprimés)
git add -A

# Ajouter uniquement les fichiers modifiés/supprimés (pas les nouveaux)
git add -u

Staging interactif — L'option la plus puissante

# Choisir exactement ce qu'on met en staging, ligne par ligne
git add -p # ou --patch

# Git affiche chaque "hunk" (bloc de code) et demande :
# y = yes (mettre ce hunk en staging)
# n = no (ignorer ce hunk)
# s = split (diviser en hunks plus petits)
# e = edit (éditer manuellement ce qui est mis en staging)
# q = quit

Exemple de session avec git add -p :

diff --git a/main.py b/main.py
index a1b2c3d..e4f5g6h 100644
--- a/main.py
+++ b/main.py
@@ -1,5 +1,8 @@
def saluer(nom):
return f"Bonjour, {nom} !"

+def aurevoir(nom): # ← nouvelle fonction
+ return f"Au revoir, {nom} !"
+
def calculer(a, b):
return a + b

Stage this hunk [y,n,q,a,d,/,e,?]?
Pourquoi utiliser git add -p ?

Le staging interactif est une meilleure pratique des professionnels. Il crée des commits petits et focalisés qui sont faciles à revoir, annuler ou comprendre dans 6 mois. L'historique des commits devient une vraie documentation.


Variantes de git commit

Commandes de base

# Commiter avec un message en une ligne
git commit -m "feat: ajout de la fonctionnalité de connexion"

# Commiter avec une description détaillée (ouvre l'éditeur)
git commit

# Mettre en staging tous les fichiers suivis ET commiter en une étape
git commit -am "fix: corriger le bug de calcul"

# Modifier le dernier commit (avant de pousser !)
git commit --amend -m "Nouveau message corrigé"
git commit --amend --no-edit # Garder le message, ajouter de nouveaux fichiers en staging

Voir ce que vous allez commiter

# Voir les changements non stagés (répertoire de travail vs zone de staging)
git diff

# Voir les changements stagés (zone de staging vs dernier commit)
git diff --staged # ou : git diff --cached

# Résumé de ce qui sera commité
git status

Écrire des messages de commit professionnels

Un bon message de commit répond à : « Que fait ce commit et POURQUOI ? »

Le format Conventional Commits

<type>(<portée optionnelle>): <description>

[corps optionnel]

[pied de page optionnel]

Types de commits

TypeCas d'utilisationExemple
featNouvelle fonctionnalitéfeat: ajout de l'inscription utilisateur
fixCorrection de bugfix: corriger la regex de validation d'email
docsDocumentation uniquementdocs: mettre à jour la documentation API
styleFormatage, pas de changement de logiquestyle: formater le code avec prettier
refactorRefactoring, pas de nouvelle fonctionnalitérefactor: extraire la fonction helper d'auth
testAjout ou correction de teststest: ajouter des tests unitaires pour la connexion
choreMaintenance, config, buildchore: mettre à jour les dépendances
perfAmélioration des performancesperf: optimiser la requête de base de données
ciConfiguration CI/CDci: ajouter le workflow GitHub Actions
revertAnnuler un commitrevert: annuler "feat: ajout connexion"

Bons vs mauvais messages de commit

# ❌ MAUVAIS — que fait ce commit ?
git commit -m "fix"
git commit -m "changements"
git commit -m "WIP"
git commit -m "asdfgh"

# ✅ BON — clair et descriptif
git commit -m "feat(auth): ajouter le mécanisme de rafraîchissement du token JWT"
git commit -m "fix(api): gérer la réponse 404 pour l'utilisateur manquant"
git commit -m "docs: ajouter les instructions de configuration au README"
git commit -m "chore: mettre à niveau les dépendances vers les dernières versions"

Commit multi-lignes avec corps

git commit
# Ouvre votre éditeur. Écrivez :
feat(checkout): ajouter l'intégration de paiement Stripe

Remplacer l'ancienne intégration PayPal par Stripe pour :
- Des frais de transaction moins élevés (2,9% vs 3,5%)
- Un meilleur support des cartes internationales
- Des notifications webhook en temps réel

Closes #142
Reviewed-by: Bob Martin

Comprendre les états des fichiers

Un fichier dans Git peut être dans l'un de ces états :

ÉtatDescriptionCommande pour voir
Non suiviNouveau fichier, Git ne le connaît pasgit status
ModifiéFichier suivi avec des changements non sauvegardésgit diff
En stagingPrêt à être commitégit diff --staged
CommitéSauvegardé dans le dépôtgit log
IgnoréExclu via .gitignoregit status --ignored

Exemples pratiques

Scénario 1 : Fonctionnalité + Correction de bug dans la même session

# Vous avez travaillé sur 2 choses aujourd'hui
git status
# Modified: src/auth/login.py ← nouvelle fonctionnalité
# Modified: src/auth/register.py ← nouvelle fonctionnalité
# Modified: src/utils/email.py ← correction de bug

# Commiter la correction de bug séparément
git add src/utils/email.py
git commit -m "fix(utils): corriger la normalisation d'email pour les majuscules"

# Commiter la nouvelle fonctionnalité
git add src/auth/
git commit -m "feat(auth): ajouter les endpoints de connexion et d'inscription"

Scénario 2 : Staging partiel avec -p

# Vous avez modifié un fichier mais voulez seulement commiter une partie
git add -p src/main.py

# Git montre chaque bloc de changements
# Mettre en staging uniquement les blocs pertinents
# Laisser les blocs non terminés hors staging

Résumé des commandes clés

CommandeDescription
git add <fichier>Mettre en staging un fichier spécifique
git add .Mettre en staging tous les changements
git add -pStaging interactif
git commit -m "msg"Commiter avec un message
git commit -am "msg"Tout mettre en staging + commiter
git commit --amendModifier le dernier commit
git diffVoir les changements non stagés
git diff --stagedVoir les changements stagés
git statusVoir l'état actuel

Prochaines étapes