git diff = quoi ?
diff sans option = non stagé. diff --staged = stagé prêt à committer.
Git ne sauvegarde pas directement vos fichiers. Il les fait passer par 3 zones :
git status & git diffAvant d’ajouter, regardez :
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 -ugit status --ignoredgit diff# diff Working Directory vs Staging Area (non stagé)
git diff --staged# ou --cached — Staging Area vs dernier commit
git diff HEAD# Working + Staging vs dernier commit
git diff --stat# résumé chiffré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
git add et ses variantes| 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) |
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 suiviCommandes à exécuter
git commitgit commit -m "feat: add login page"git commit# → ouvre $EDITOR (VS Code, vim, nano)# Ligne 1 : titre (50 chars)# Ligne vide# Lignes suivantes : corps détaillégit commit -v # montre le diff dans l'éditeurgit 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 contenugit commit --allow-empty -m "chore: trigger CI"git log & git showgit log — la basegit 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"git show — zoom sur un commitgit show# dernier commit
git show HEADgit show a1b2c3dgit show HEAD~1Commandes à exécuter
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
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’indexQuelles sont les 3 zones Git ?
Cliquer pour révéler la réponseWorking Directory (fichiers), Staging Area (index), Local Repository (.git/commits).
Cliquer pour voir la questionQuelle différence entre git diff et git diff --staged ?
Cliquer pour révéler la réponsediff = Working vs Staging (non stagé). --staged = Staging vs dernier commit.
Cliquer pour voir la questionQuelle commande stage un fichier morceau par morceau ?
Cliquer pour révéler la réponsegit add -p (patch, répond y/n par hunk).
Cliquer pour voir la questionComment corriger le dernier commit pas encore pushé ?
Cliquer pour révéler la réponsegit commit --amend -m 'nouveau message' ou --no-edit pour garder le message.
Cliquer pour voir la questionQuelle commande log compacte + graphe ?
Cliquer pour révéler la réponsegit log --oneline --graph --all --decorate
Cliquer pour voir la questionQuel préfixe pour une nouvelle fonctionnalité ?
Cliquer pour révéler la réponsefeat: (ex: feat: add login page)
Cliquer pour voir la questionQue ne jamais committer ?
Cliquer pour révéler la réponseSecrets : .env, clés API, mots de passe — les mettre dans .gitignore avant.
Cliquer pour voir la questionQuelle commande retire un fichier de l'index sans le supprimer ?
Cliquer pour révéler la réponsegit rm --cached <file> ou git restore --staged <file>
Cliquer pour voir la question1. 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é) ?
# Zonesgit statusgit status --shortgit diffgit diff --stagedgit diff HEAD
# Addgit add README.mdgit add .git add -Agit add -pgit add -ugit rm --cached <file>git restore --staged <file>
# Commitgit commit -m "feat: add login"git commit -vgit commit -a -m "fix: typo"git commit --amend -m "corrige message"git commit --amend --no-edit
# Loggit loggit log --onelinegit log --oneline --graph --all --decorategit log --statgit log -pgit log --since="yesterday"git log --grep="feat"git showgit show HEADgit show a1b2c3dVous savez enregistrer l’historique. Apprenons à isoler les fonctionnalités sans casser main : les branches.
Étape suivante : Les Branches