Aller au contenu principal

Commande Git Diff


Table des matières


  1. Introduction à git diff
  2. Diff du working directory
  3. Diff du staging area
  4. Diff entre commits
  5. Diff entre branches
  6. Options utiles
  7. 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
SymboleSignification
---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

ExtensionDescription
GitLensDiff inline, blame, historique
Git GraphVisualisation graphique
Git HistoryHistorique 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

CommandeDescription
git diffWorking directory vs staging/HEAD
git diff --stagedStaging vs HEAD
git diff A BCommit A vs commit B
git diff branch1 branch2Branche 1 vs branche 2
git diff --statRésumé statistique
git diff --name-onlyListe des fichiers uniquement
git difftoolOuvrir dans un outil visuel

🔝 Retour à la table des matières