Flux de Travail Git — add, commit, push, pull
Git organise le travail en 4 zones distinctes. Comprendre ces zones est la clé pour maîtriser le workflow Git au quotidien.
Les 4 zones de Git
┌─────────────────┬─────────────────┬─────────────────┬─────────────────┐
│ Working │ Staging │ Local │ Remote │
│ Directory │ Area │ Repository │ Repository │
│ │ │ │ │
│ Vos fichiers │ Fichiers prêts │ Historique │ GitHub/GitLab │
│ modifiés │ au commit │ des commits │ (partagé) │
└────────┬────────┴────────┬────────┴────────┬────────┴────────┬────────┘
│ │ │ │
│ git add ──► │ git commit ──► │ git push ──► │
│ │ │ ◄── git pull │
git add — Passer en zone de staging
git add déplace les modifications du Working Directory vers la Staging Area.
# Ajouter un fichier spécifique
git add app.js
# Ajouter plusieurs fichiers
git add app.js style.css
# Ajouter tous les fichiers modifiés
git add .
git add -A
# Ajouter par dossier
git add src/
La Staging Area vous permet de choisir précisément quelles modifications seront incluses dans le prochain commit. Vous pouvez modifier 5 fichiers mais n'en commiter que 2.
git commit — Enregistrer dans le dépôt local
git commit crée un snapshot permanent des fichiers en staging dans le dépôt local.
# Commit avec message
git commit -m "feat: add user login form"
# Commit en ouvrant l'éditeur de texte (pour message long)
git commit
# Ajouter + commiter en une seule commande (fichiers déjà trackés uniquement)
git commit -am "fix: correct typo in header"
Avant commit : Après commit :
Staging Area Local Repository
┌──────────┐ ┌──────────────────────┐
│ app.js │ ──────────►│ commit 3 (HEAD) │
│ style.css│ │ commit 2 │
└──────────┘ │ commit 1 │
└──────────────────────┘
Anatomie d'un bon message de commit
feat: add user authentication
- Add login/logout endpoints
- Implement JWT token validation
- Add tests for auth middleware
| Préfixe | Usage |
|---|---|
feat: | Nouvelle fonctionnalité |
fix: | Correction de bug |
docs: | Documentation |
refactor: | Refactoring sans changement fonctionnel |
test: | Ajout ou modification de tests |
chore: | Tâches de maintenance (deps, config...) |
git push — Envoyer vers le remote
git push transfère les commits locaux vers le dépôt distant.
# Push vers la branche courante
git push
# Push vers une branche spécifique
git push origin main
git push origin feature/login
# Premier push d'une nouvelle branche (avec tracking)
git push -u origin feature/login
# Après -u, les prochains push sur cette branche : juste "git push"
Local Repository Remote Repository
┌──────────────┐ ┌──────────────┐
│ commit 3 │ ──────► │ commit 3 │
│ commit 2 │ │ commit 2 │
│ commit 1 │ │ commit 1 │
└──────────────┘ └──────────────┘
git push
git pull — Récupérer depuis le remote
git pull récupère les commits du remote et les fusionne dans votre branche locale.
# Pull de la branche courante
git pull
# Pull d'une branche spécifique
git pull origin main
# Pull avec rebase (historique plus propre)
git pull --rebase origin main
Remote Repository Local Repository
┌──────────────┐ ┌──────────────┐
│ commit 4 │ ──────► │ commit 4 │ (nouveau)
│ commit 3 │ │ commit 3 │
│ commit 2 │ │ commit 2 │
└──────────────┘ └──────────────┘
git pull
git pull=git fetch+git mergeToujours pull avant de push pour éviter les conflits.
git status — Voir l'état du repo
git status
On branch main
Changes to be committed: ← Staging Area (git add fait)
(use "git restore --staged" to unstage)
modified: app.js
Changes not staged for commit: ← Working Directory (modifié mais pas add)
(use "git add" to stage)
modified: style.css
Untracked files: ← Nouveaux fichiers non encore trackés
(use "git add" to include)
config.js
git log — Voir l'historique
# Historique complet
git log
# Format compact (un commit par ligne)
git log --oneline
# Avec graphe des branches
git log --oneline --graph --all
# Limiter le nombre de commits
git log -5
# Filtrer par auteur
git log --author="Alice"
# Commits qui modifient un fichier
git log -- app.js
Exemple de git log --oneline --graph :
* a3f2c1d (HEAD -> main) feat: add payment module
* b12e8f0 fix: correct cart total calculation
* c891a2e feat: implement shopping cart
* d45b7c3 initial commit
git diff — Voir les différences
# Modifications non stagées (Working Directory vs Staging)
git diff
# Modifications stagées (Staging vs dernier commit)
git diff --cached
git diff --staged
# Différence entre deux commits
git diff abc123 def456
# Différence avec le dernier commit
git diff HEAD
Workflow quotidien typique
# Matin : récupérer les derniers changements de l'équipe
git pull
# Travailler sur le code...
# Voir ce qui a changé
git status
git diff
# Stager les fichiers
git add app.js
# Commiter
git commit -m "feat: implement user profile page"
# Pousser vers le remote
git push
À retenir
- 4 zones : Working Directory → Staging Area → Local Repo → Remote Repo
git add <file>= placer en staging (prêt pour le commit)git commit -m "message"= enregistrer le snapshot dans le repo localgit push= envoyer les commits locaux vers le remotegit pull= récupérer et fusionner les commits du remotegit status= voir l'état des fichiers (modifié, stagé, non tracké)git log --oneline= historique compact des commitsgit diff= voir les différences non stagées ;git diff --cached= différences stagées- Toujours pull avant push pour éviter les conflits