Commande Git Diff
Table des matières
- Introduction à git diff
- Diff du working directory
- Diff du staging area
- Diff entre commits
- Diff entre branches
- Options utiles
- Outils de diff visuels
1 - Introduction à git diff
git diff permet de voir les différences entre :
- Les fichiers modifiés et le dernier commit
- Le staging area et le dernier commit
- Deux commits quelconques
- Deux branches
Format de sortie
diff --git a/file.txt b/file.txt
index abc1234..def5678 100644
--- a/file.txt
+++ b/file.txt
@@ -1,3 +1,4 @@
Ligne 1
-Ligne supprimée
+Ligne ajoutée
+Nouvelle ligne
Ligne 3
| Symbole | Signification |
|---|---|
--- | Fichier source (ancien) |
+++ | Fichier destination (nouveau) |
- | Ligne supprimée (rouge) |
+ | Ligne ajoutée (vert) |
@@ | Position dans le fichier |
🔝 Retour à la table des matières
2 - Diff du working directory
Voir les modifications non-staged
git diff
Cette commande montre les différences entre :
- Working directory (fichiers modifiés)
- Dernier commit (ou staging area si des fichiers sont staged)
Exemple
# Modifier un fichier
echo "Nouvelle ligne" >> README.md
# Voir les modifications
git diff
Résultat :
diff --git a/README.md b/README.md
index abc1234..def5678 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,4 @@
# Mon Projet
Description du projet
+Nouvelle ligne
Diff d'un fichier spécifique
git diff README.md
git diff src/app.js
🔝 Retour à la table des matières
3 - Diff du staging area
Voir les modifications staged
git diff --staged
# ou
git diff --cached
Cette commande montre les différences entre :
- Staging area (fichiers ajoutés avec
git add) - Dernier commit
Exemple
# Modifier et stager un fichier
echo "Changement" >> README.md
git add README.md
# Voir ce qui sera commité
git diff --staged
Différence importante
# Modifications PAS encore staged
git diff
# Modifications PRÊTES à être commitées
git diff --staged
🔝 Retour à la table des matières
4 - Diff entre commits
Entre deux commits
git diff <commit1> <commit2>
Exemples
# Entre deux commits spécifiques
git diff abc1234 def5678
# Entre le commit actuel et un ancien
git diff HEAD~3 HEAD
# Entre le dernier commit et l'avant-dernier
git diff HEAD~1 HEAD
# ou
git diff HEAD^ HEAD
Voir les changements d'un commit
# Ce qu'un commit a changé
git diff abc1234^ abc1234
# Plus simple avec show
git show abc1234
Diff depuis un commit jusqu'à maintenant
git diff abc1234 HEAD
git diff abc1234..HEAD
🔝 Retour à la table des matières
5 - Diff entre branches
Comparer deux branches
git diff main feature/login
Voir ce qui va changer lors d'un merge
# Ce que feature/login apporte par rapport à main
git diff main...feature/login
💡 Les trois points (
...) comparent depuis l'ancêtre commun.
Différence entre .. et ...
# Deux points : compare les extrémités
git diff main..feature # Tous les changements entre les deux
# Trois points : depuis l'ancêtre commun
git diff main...feature # Ce que feature a ajouté depuis la divergence
Visualisation
A---B---C feature
/
D---E---F---G main
git diff main..feature → Compare G avec C
git diff main...feature → Compare E avec C (changements sur feature)
🔝 Retour à la table des matières
6 - Options utiles
Affichage
# Voir uniquement les noms de fichiers modifiés
git diff --name-only
# Noms + statut (ajouté, modifié, supprimé)
git diff --name-status
# Statistiques (résumé)
git diff --stat
Exemple --stat
git diff --stat HEAD~3 HEAD
Résultat :
README.md | 5 +++++
src/app.js | 12 ++++++------
style.css | 3 +--
3 files changed, 12 insertions(+), 8 deletions(-)
Options de contexte
# Plus de lignes de contexte (défaut: 3)
git diff -U5
# Ignorer les espaces
git diff --ignore-all-space
git diff -w
# Ignorer les changements d'espaces en fin de ligne
git diff --ignore-space-at-eol
Filtrer par type de fichier
# Seulement les fichiers .js
git diff -- '*.js'
# Seulement un dossier
git diff -- src/
# Exclure un dossier
git diff -- . ':!node_modules'
Diff coloré
# Avec mots color és (plus lisible)
git diff --word-diff
# Couleurs personnalisées
git diff --color-words
🔝 Retour à la table des matières
7 - Outils de diff visuels
Configurer un outil de diff
# VS Code
git config --global diff.tool vscode
git config --global difftool.vscode.cmd 'code --wait --diff $LOCAL $REMOTE'
# Meld (Linux)
git config --global diff.tool meld
# P4Merge
git config --global diff.tool p4merge
Utiliser l'outil configuré
git difftool
git difftool HEAD~1 HEAD
git difftool main feature/login
Extensions VS Code recommandées
| Extension | Description |
|---|---|
| GitLens | Diff inline, blame, historique |
| Git Graph | Visualisation graphique |
| Git History | Historique des fichiers |
Diff dans GitHub
Sur GitHub, vous pouvez comparer :
- Commits :
github.com/user/repo/compare/abc1234...def5678 - Branches :
github.com/user/repo/compare/main...feature
Résumé des commandes
| Commande | Description |
|---|---|
git diff | Working directory vs staging/HEAD |
git diff --staged | Staging vs HEAD |
git diff A B | Commit A vs commit B |
git diff branch1 branch2 | Branche 1 vs branche 2 |
git diff --stat | Résumé statistique |
git diff --name-only | Liste des fichiers uniquement |
git difftool | Ouvrir dans un outil visuel |