Cours
Git Diff expliqué : Un guide complet avec des exemples
Git diff est votre fenêtre sur les changements qui se produisent dans votre dépôt de code. Il s'agit essentiellement d'une commande qui vous montre les différences entre les divers états de vos fichiers, qu'il s'agisse de comparer votre travail actuel avec ce que vous avez déjà mis en page ou de comparer les changements entre les branches et les commits. Il s'agit de la façon dont Git répond à la question "Qu'est-ce qui a changé ?". Lorsque vous exécutez git diff
, Git analyse le contenu des fichiers ligne par ligne, identifiant ce qui a été ajouté, supprimé ou modifié, et présente ces informations dans un format standardisé qui met en évidence exactement ce qui a été modifié et où.
Git diff aide les développeurs à assurer la qualité du code en fournissant une vue claire des modifications avant qu'elles ne soient validées. Nous verrons ici comment utiliser efficacement cette commande essentielle, des comparaisons de base aux techniques avancées qui amélioreront votre flux de développement et la collaboration au sein de votre équipe.
Conditions préalables
Pour suivre ce tutoriel, vous devez être familiarisé avec les concepts Git suivants :
- Flux de travail Git de base (init, add, commit)
- Les dépôts Git et leur structure
- Les branches et leur fonctionnement
- Commits et historique des commits
- L'aire de transit (index)
Si vous avez besoin de revoir ces concepts, ces ressources vous aideront :
- Aide-mémoire Git- Référence rapide pour les commandes Git les plus courantes
- Cours d'introduction à Git- Pour les débutants qui apprennent les bases de Git
- Tutoriel GitHub et Git pour les débutants- Introduction pratique à Git et GitHub
- Cours Git intermédiaire- Pour ceux qui sont prêts à améliorer leurs compétences en matière de Git
Vous aurez besoin de Git installé sur votre système pour suivre les exemples. Toutes les commandes peuvent être exécutées dans un terminal ou une invite de commande.
Pourquoi Git Diff est essentiel pour les développeurs
Tout développeur a besoin de savoir ce qui a été modifié dans son code, qu'il travaille seul ou au sein d'une équipe de plusieurs centaines de personnes. Sans git diff, vous devriez deviner les lignes que vous avez modifiées, ce qui rendrait le dépannage et la collaboration presque impossibles.
Git diff est essentiel pour la gestion du changement et sert de base à la création de logiciels de qualité grâce à des processus de révision efficaces. Lors de l'examen des modifications, git diff fournit le contexte nécessaire pour comprendre non seulement ce qui a changé, mais aussi pourquoi ces changements sont importants.
Cette visibilité directe sur l'évolution du code aide les équipes à maintenir les normes et à empêcher les bogues d'atteindre la production.
Au fur et à mesure que les projets gagnent en complexité, git diff devient vraiment indispensable pour plusieurs raisons :
- Modifier la vérification: Confirmez exactement ce que vous êtes sur le point de livrer, en évitant d'inclure accidentellement du code de débogage ou des modifications sans rapport avec le sujet.
- Transfert de connaissances: Comprendre ce que les coéquipiers ont fait sans avoir à lire des fichiers entiers
- Résolution des conflits: Identifier exactement où et comment les changements entrent en conflit lors des fusions
- Analyse historique: Cursus pour déterminer quand des changements spécifiques ont été introduits afin de chasser les bogues ou de comprendre l'évolution des fonctionnalités.
- Examens de code ciblés: Concentrez votre attention sur les parties du code qui ont réellement été modifiées, ce qui permet de gagner du temps et d'améliorer la qualité de la révision.
Pour utiliser efficacement git diff, il est nécessaire de comprendre l'architecture sous-jacente qui permet ces comparaisons - le modèle "Three-Tree" de Git.
L'architecture à trois arbres de Git
Pour comprendre git diff, vous devez d'abord comprendre l'architecture fondamentale "à trois arbres" de Git. Malgré leur nom, il ne s'agit pas d'arbres réels dans le système de fichiers, mais plutôt de trois états distincts dans lesquels votre code existe.
Considérez ces états comme trois versions différentes de votre projet que Git suit simultanément : le répertoire de travail (vos fichiers actuels), la zone de transit (ou index, où les modifications sont préparées pour être validées) et le référentiel (l'historique des validations de votre projet stocké dans le répertoire .git
).
Le répertoire de travail contient les fichiers que vous modifiez activement - c'est là que vous écrivez le code, que vous apportez des modifications et que vous testez votre travail. La zone de transit sert de zone de préparation où vous sélectionnez les modifications à inclure dans votre prochaine livraison. Vous pouvez le considérer comme un quai de chargement où les paquets (vos changements) sont organisés avant d'être expédiés.
Enfin, le dépôt stocke l'historique complet de votre projet sous la forme d'une série de commits, des instantanés de votre code à des moments précis, liés les uns aux autres pour former une chaîne historique.
Git diff fonctionne en comparant ces trois états dans différentes combinaisons. Lorsque vous exécutez git diff
sans arguments, il compare votre répertoire de travail à la zone de mise en scène, en affichant les modifications que vous avez effectuées mais qui n'ont pas encore été mises en page .
L'utilisation de git diff --staged
permet de comparer la Staging Area à la dernière livraison, en montrant ce qui sera inclus dans votre prochaine livraison.
Et git diff HEAD
compare votre répertoire de travail directement au dernier commit, en montrant tous les changements non validés, quel que soit le statut de la mise en scène.
Ces points de comparaison constituent la base de toutes les opérations de diff dans Git :
- Répertoire de travail ↔ Staging Area: Quelles sont les modifications que j'ai apportées mais qui n'ont pas encore été mises en œuvre ? (
git diff
) - Staging Area ↔ Repository: Quelles sont les modifications que j'ai mises en place et qui seront validées ensuite ? (
git diff --staged
) - Répertoire de travail ↔ Référentiel: Quelle est la différence totale entre mes fichiers de travail et le dernier commit ? (
git diff HEAD
) - Entre les commits: Comment le code a-t-il évolué entre les différentes périodes de l'histoire ? (
git diff commit1-hash commit2-hash
)
La compréhension de cette architecture vous donne le modèle mental nécessaire pour utiliser efficacement git diff afin de savoir exactement ce qui a été modifié, où et quand dans votre base de code.
Avec cette compréhension de l'architecture, nous pouvons maintenant explorer comment utiliser les commandes git diff en pratique pour obtenir des informations sur l'évolution de votre code à travers ces trois états.
Utilisation de base du Diff Git
Créons un exemple de projet d'analyse de données pour démontrer l'efficacité de git diff. Nous allons mettre en place un petit référentiel avec des scripts Python, des données CSV et des fichiers texte que nous pourrons modifier tout au long de ce tutoriel.
# Create and initialize our project
mkdir data-analysis-project
cd data-analysis-project
git init
# Create initial files
echo "# Data Analysis Project\nA sample project to demonstrate git diff functionality." > README.md
echo "import pandas as pd\n\ndef load_data(filename):\n return pd.read_csv(filename)\n\ndef analyze_data(data):\n return data.describe()" > analysis.py
echo "id,name,value\n1,alpha,10\n2,beta,20\n3,gamma,30" > data.csv
echo "DEBUG=False\nDATABASE_PATH=./data/" > config.txt
echo "def normalize_data(data):\n return (data - data.min()) / (data.max() - data.min())" > utils.py
# Make our first commit
git add .
git commit -m "Initial commit with basic project structure"
# Check the directory structure
> tree
.
├── README.md
├── analysis.py
├── config.txt
├── data.csv
└── utils.py
Notre projet compte désormais cinq fichiers sous contrôle de version, ce qui nous permet de démontrer différents scénarios de diff. Au fur et à mesure de notre progression, nous modifierons ces fichiers pour montrer comment git diff révèle les changements dans différents contextes.
Comprendre les résultats de git diff
Lorsque vous exécutez une commande git diff, la sortie suit un format standardisé conçu pour indiquer clairement ce qui a été modifié. Modifions notre fichier analysis.py
pour voir un diff en action :
# Update analysis.py with a new function
echo "import pandas as pd\n\ndef load_data(filename):\n return pd.read_csv(filename)\n\ndef analyze_data(data):\n return data.describe()\n\ndef visualize_data(data):\n return data.plot(kind='bar')" > analysis.py
Examinons maintenant le résultat du git diff :
git diff
Vous obtiendrez un résultat similaire à celui-ci :
Note : Pour quitter la sortie de git diff, appuyez sur "q" dans votre terminal.
Décortiquons ce résultat :
- L'en-tête (
diff --git a/analysis.py b/analysis.py
) indique quel fichier est comparé, à savoir analysis.py. - Les métadonnées du fichier (
index db0e049..a7a7ab0 100644
) montre les identifiants internes de Git pour les versions avant et après. - Les marqueurs de fichiers (
--- a/analysis.py and +++ b/analysis.py
) indiquent les fichiers "avant" et "après". - L'en-tête hunk (
@@ -5,3 +5,6 @@
) indique les lignes concernées. Cette notation peut être interprétée comme suit :
-5,3
signifie qu'à partir de la ligne 5 du fichier original, 3 lignes sont affichées dans le diff+5,6
signifie qu'à partir de la ligne 5 du fichier modifié, 6 lignes sont affichées dans le diff- La différence entre ces chiffres indique que 3 lignes ont été ajoutées
5. Lecontenu de change avec les lignes commençant par +
qui montrent des ajouts
Dans les fichiers plus volumineux, git diff regroupe les modifications en "hunks", c'est-à-dire les sections du fichier qui contiennent des modifications. Chaque morceau a son propre en-tête avec des numéros de ligne pour vous aider à localiser les modifications dans le fichier.
Comparaison entre le répertoire de travail et la zone de transit
L'exécution de git diff
sans arguments permet de comparer votre répertoire de travail (état actuel des fichiers) à la zone de transition (modifications prêtes à être validées). Ceci est utile pour revoir ce que vous avez modifié mais que vous n'avez pas encore préparé pour votre prochaine livraison.
Modifions plusieurs fichiers pour faire une démonstration :
# Update README.md
echo "# Data Analysis Project\nA sample project to demonstrate git diff functionality.\n\n## Installation\nRun \pip install -r requirements.txt" > README.md
# Update data.csv
echo "id,name,value\n1,alpha,10\n2,beta,20\n3,gamma,30\n4,delta,40" > data.csv
Maintenant, ne mettons en scène que les changements du fichier README.md :
git add README.md
L'exécution de git diff
ne montrera que les modifications non gérées de data.csv
et du fichier analysis.py
ci-dessus :
Cela vous permet de vous concentrer sur ce que vous n'avez pas encore mis en scène. Si vous voulez voir ce que vous avez déjà mis en scène :
git diff --staged # or git diff --cached (they're synonyms)
Cela affichera les modifications du fichier README.md qui sont mises à jour et prêtes à être livrées. Ce flux de travail est essentiel pour créer des commandes propres et logiques. Vous pouvez mettre en scène les parties de votre travail qui ont un sens ensemble, revoir le diff mis en scène pour vérifier qu'il s'agit d'une unité de changement cohérente, puis le valider.
Comparaison entre la zone de transit et la dernière livraison
La commande git diff --staged
compare votre Staging Area à votre dernière livraison. Cela vous montre exactement ce qui sera inclus dans votre prochain commit si vous lancez git commit
maintenant.
Mettons en scène nos modifications de data.csv et examinons ce qui est mis en scène :
git add data.csv
git diff --staged
La sortie montrera maintenant les changements apportés à README.md
et data.csv
, car ils ont tous deux été mis en scène. Cette étape de révision est essentielle avant d'engager le projet - elle constitue votre dernière ligne de défense contre les modifications involontaires.
Un flux de travail courant peut ressembler à ce qui suit :
- Modifier plusieurs fichiers
- Lancez le site
git diff
pour passer en revue toutes les modifications. - Utilisez
git add
de manière sélective pour mettre en scène des groupes logiques de changements. - Exécutez le site
git diff --staged
pour vérifier ce qui est sur le point d'être engagé. - Validez les modifications par étapes avec
git commit -m "Your message"
- Répétez l'opération pour d'autres groupes logiques de changements
Cette approche méthodique permet de conserver un historique des livraisons propre et significatif qui facilite la compréhension de l'évolution de votre projet et l'identification des problèmes qui ont pu être introduits. Au fur et à mesure que vous gagnerez en expérience, ces commandes diff deviendront une seconde nature et vous accompagneront constamment dans le processus de développement.
Effectuons nos commits avant de passer à l'étape suivante :
# data.csv and README.md are to be committed
git commit -m "Modify data.csv and README.md files"
# Stage and commit analysis.py
git add analysis.py
git diff --staged # Review the changes one more time
git commit -m "Add a new function to analysis.py"
Techniques intermédiaires de Git Diff
Maintenant que nous comprenons les bases de git diff, explorons des techniques plus puissantes qui amélioreront votre capacité à suivre et analyser les changements dans vos projets. Nous continuerons à travailler sur notre projet d'analyse de données pour démontrer ces concepts intermédiaires.
Comparaison entre différentes références
Git est construit autour du concept de références - des pointeurs vers des états spécifiques de votre code. Ces références incluent les branches, les commits et les tags. La commande git diff peut comparer deux de ces références pour montrer ce qui a changé entre elles.
Créons une nouvelle branche pour le développement d'une fonctionnalité et apportons quelques modifications :
# Create and switch to a new branch
git checkout -b feature/advanced-analytics
# Modify the analysis.py file with a new function
echo "import pandas as pd
import numpy as np
def load_data(filename):
return pd.read_csv(filename)
def analyze_data(data):
return data.describe()
def visualize_data(data):
return data.plot(kind='bar')
def perform_advanced_analysis(data):
"""Performs advanced statistical analysis on the dataset"""
results = {}
results['correlation'] = data.corr()
results['skew'] = data.skew()
return results" > analysis.py
# Commit the changes
git add analysis.py
git commit -m "Add advanced analysis function"
Nous pouvons maintenant comparer notre branche de fonctionnalités à la branche principale :
git diff main feature/advanced-analytics
Cette commande montre toutes les différences entre les deux branches - chaque fichier qui a été modifié, ajouté ou supprimé. Vous verrez les changements que nous avons apportés à analysis.py, y compris nos nouvelles importations et fonctions (appuyez plusieurs fois sur la touche Entrée car le diff complet est tronqué dans le terminal).
Pour comparer avec un commit spécifique, vous pouvez utiliser le hash du commit :
git log --oneline # Find the commit hash you want to compare with
git diff 7b3105e # Replace 7b3105e with the actual commit hash you want to compare
Cette capacité de comparaison devient inestimable lorsque
- Préparer les revues de code en visualisant tous les changements dans une branche de fonctionnalités
- Vérifier les changements qu'apporterait la branche d'un collègue avant de la fusionner
- Comprendre l'évolution de votre base de code entre les versions.
Comparaison de fichiers spécifiques
Lorsque vous travaillez sur des référentiels volumineux, vous souhaitez souvent vous concentrer sur les modifications apportées à des fichiers ou des répertoires spécifiques plutôt que de voir toutes les différences. Git diff facilite cette tâche en vous permettant de spécifier des chemins d'accès.
Modifions plusieurs fichiers :
# Update config.txt
echo "DEBUG=True
DATABASE_PATH=./data/
LOG_LEVEL=INFO" > config.txt
# Update utils.py
echo "def normalize_data(data):
return (data - data.min()) / (data.max() - data.min())
def clean_data(data):
return data.dropna()" > utils.py
Pour voir les modifications apportées au fichier de configuration uniquement :
git diff config.txt
Ou pour comparer un fichier spécifique entre les branches :
# Compare analysis.py file between main and feature/advanced-analytics branches
git diff main feature/advanced-analytics -- analysis.py
Le --
dans la commande ci-dessus permet à Git de faire la distinction entre les références et les chemins d'accès aux fichiers. Ceci est particulièrement utile lorsque
- Travailler dans des référentiels contenant de nombreux fichiers mais en se concentrant sur des composants spécifiques (ce qui sera souvent le cas)
- Vérifier comment la configuration a changé d'une branche à l'autre
- Examiner uniquement les fichiers les plus critiques d'un grand nombre de modifications
Options de différenciation contextuelle
Git diff propose plusieurs options pour ajuster l'affichage des différences, ce qui permet de se concentrer sur les changements significatifs.
Par exemple, lorsqu'il s'agit de modifications de formatage de code, les différences d'espacement peuvent masquer d'importantes modifications sémantiques. Prenons l'exemple d'une modification de formatage :
# Make a whitespace change to analysis.py
sed -i '' 's/ return/ return/g' analysis.py # Reduce indentation
Maintenant, la comparaison avec le git diff standard montre des changements d'espacement (remarquez comment les instructions de retour sont mal alignées) :
git diff analysis.py
# OUT:
--- a/analysis.py
+++ b/analysis.py
@@ -2,17 +2,17 @@ import pandas as pd
import numpy as np
def load_data(filename):
- return pd.read_csv(filename)
+ return pd.read_csv(filename)
def analyze_data(data):
- return data.describe()
+ return data.describe()
def visualize_data(data):
- return data.plot(kind='bar')
+ return data.plot(kind='bar')
def perform_advanced_analysis(data):
Performs advanced statistical analysis on the dataset
results = {}
results['correlation'] = data.corr()
results['skew'] = data.skew()
- return results
+ return results
Mais nous pouvons ignorer les changements d'espacement (ceci ne montre aucun changement puisque nous avons seulement supprimé l'espacement) :
git diff -w analysis.py # or --ignore-all-space
Une autre option utile consiste à contrôler les lignes de contexte, c'est-à-dire les lignes inchangées qui entourent les modifications :
git diff -U1 analysis.py # Show only 1 line of context (default is 3)
git diff -U5 analysis.py # Show 5 lines of context
Ces options contextuelles sont particulièrement utiles lorsque
- Examiner le code qui a fait l'objet d'un formatage automatisé
- Mettre l'accent sur les changements fonctionnels plutôt que sur les changements de style
- Besoin de plus de contexte pour comprendre un changement particulier
- Travailler avec des fichiers volumineux pour lesquels le contexte par défaut produirait trop de données.
En maîtrisant ces techniques intermédiaires, vous aurez un contrôle beaucoup plus fin sur la façon dont vous examinez et comprenez les changements dans votre base de code, ce qui rendra votre flux de développement plus efficace et vos examens de code plus efficaces.
Livrons les dernières modifications avant de passer aux applications avancées de git diff :
git add .
git commit -m "Modify analysis.py, config.txt, and utils.py"
Applications avancées de Git Diff
En nous appuyant sur notre compréhension des techniques intermédiaires de git diff, nous allons explorer quelques applications avancées qui vous permettront d'améliorer vos compétences sur Git. Ces techniques avancées sont particulièrement utiles lorsque vous travaillez sur des bases de code complexes ou que vous collaborez avec des équipes plus importantes.
Utilisation d'outils de comparaison externes
Bien que la fonction de comparaison intégrée de Git soit puissante, un outil de comparaison visuelle permet parfois d'obtenir une meilleure clarté, en particulier pour les modifications complexes. Git vous permet de configurer des outils externes pour améliorer votre expérience du diff.
Mettons en place un outil de diffraction visuelle très répandu. Nous utiliserons VSCode comme exemple, mais une configuration similaire fonctionne pour des outils tels que Beyond Compare, Meld ou KDiff3 :
# Configure Git to use VSCode as the diff tool (project-specific)
git config diff.tool vscode
git config difftool.vscode.cmd "code --wait --diff \$LOCAL \$REMOTE"
# To use other popular tools, you could use:
# For Beyond Compare (project-specific):
git config diff.tool bc3
git config difftool.bc3.path "/path/to/beyond/compare"
# Installation commands:
# For Beyond Compare:
# On macOS: brew install --cask beyond-compare
# On Ubuntu: sudo apt-get install beyond-compare
# On Windows: Download from https://www.scootersoftware.com/download.php
# Note: To apply these settings globally instead of just the current project,
# add the --global flag to each command, for example:
# git config --global diff.tool vscode
Maintenant, au lieu d'utiliser git diff
, vous pouvez utiliser :
git difftool main feature/advanced-analytics
Cela ouvrira votre outil de diff visuelle configuré pour afficher les changements. Voici à quoi ressemble Beyond Compare :
Les outils de diff visuelle présentent plusieurs avantages :
- Comparaison côte à côte facilitant la compréhension du contexte
- Mise en évidence de la syntaxe en fonction des préférences de l'éditeur
- Navigation avancée entre les modifications
- Possibilité de modifier les fichiers directement tout en examinant les différences
Lors de l'examen de modifications importantes ou de fichiers présentant des structures complexes (comme JSON ou XML imbriqués), les outils de comparaison visuelle peuvent améliorer considérablement la compréhension et l'efficacité.
Commandes de diff spécialisées
Git propose des commandes diff spécialisées qui vous permettent un contrôle plus granulaire pour des cas d'utilisation spécifiques. Explorons quelques-unes de ces commandes puissantes :
git diff-tree
examine les différences entre les objets arborescents (répertoires) :
# Get the hash of the last two commits
LAST_COMMIT=$(git rev-parse HEAD)
PREV_COMMIT=$(git rev-parse HEAD~1)
# Show changes in the last commit
git diff-tree --patch $PREV_COMMIT $LAST_COMMIT
git diff-index compare l'arbre de travail avec l'index (zone de transit) ou un arbre :
# Compare working directory with the index
git diff-index --patch HEAD
git diff-index
est particulièrement utile pour l'écriture de scripts et l'automatisation. Il vous permet de vérifier par programme les modifications qui seront incluses dans votre prochaine livraison, ce qui le rend précieux pour les crochets de pré-commission et les scripts de validation.
Par exemple, vous pouvez l'utiliser dans un pipeline CI/CD pour vérifier que certains fichiers n'ont pas été modifiés ou pour vous assurer que les changements de configuration suivent des modèles spécifiques avant d'autoriser les livraisons.
git diff-files
montre les changements entre les fichiers du répertoire de travail et l'index :
# Check differences for specific files
git diff-files --patch config.txt
Ces commandes spécialisées sont particulièrement utiles pour :
- Création de flux de travail et de scripts Git personnalisés
- Déboguer les problèmes internes de Git
- Analyse ciblée de l'état du référentiel
- Construire des outils d'automatisation qui interagissent avec Git
Analyse de l'historique des codes
L'une des applications les plus puissantes de git diff est l'analyse de l'évolution du code dans le temps, ce qui peut s'avérer crucial pour le débogage ou la compréhension du développement d'une fonctionnalité.
Examinons une livraison spécifique à l'aide de la notation spéciale ^!
:
# Get the hash of our advanced analytics commit
ANALYTICS_COMMIT=$(git log --oneline | grep "advanced analysis" | cut -d ' ' -f 1)
# Show only changes introduced in that specific commit
git diff $ANALYTICS_COMMIT^!
La syntaxe ^!
est un raccourci pour comparer un commit avec son parent, montrant exactement ce qui a changé dans ce commit.
Pour retracer l'évolution d'un dossier spécifique dans le temps :
# Analyze how analysis.py changed over the last 3 commits
git log -p -3 analysis.py
Lorsque vous recherchez un insecte, vous pouvez utiliser git diff
avec git bisect
:
# Add a bug to simulate a regression
echo "import pandas as pd
import numpy as np
def load_data(filename):
# Bug: accidentally returning None instead of the data
pd.read_csv(filename)
return None
def analyze_data(data):
return data.describe()
def visualize_data(data):
return data.plot(kind='bar')
def perform_advanced_analysis(data):
results = {}
results['correlation'] = data.corr()
results['skew'] = data.skew()
return results" > analysis.py
git add analysis.py
git commit -m "Update analysis.py with a hidden bug"
# Now use git bisect to find when the bug was introduced
git bisect start
git bisect bad # Mark current commit as containing the bug
git bisect good main # Mark the main branch as working correctly
# Git will check out commits for you to test
# Once found, you can examine the exact change that introduced the bug
git diff HEAD^!
Git bisect est un outil de débogage puissant qui effectue une recherche binaire dans l'historique des livraisons pour trouver la livraison qui a introduit un bogue. Combiné à git diff, il crée un flux de travail efficace :
1. Commencez le processus de bissection avec git bisect start
2. Marquez le commit actuel comme mauvais (contenant le bogue) avec git bisect bad
3. Marquez un bon commit connu (où le bogue n'existe pas) avec git bisect good
4. Git extrait automatiquement un commit au milieu de votre historique pour que vous puissiez le tester.
5. Après avoir testé le commit actuel, indiquez à git le résultat :
- Si le bogue existe dans ce commit :
git bisect bad
- Si le bogue n'existe pas dans ce commit :
git bisect good
6. Git continuera à vérifier différents commits en fonction de vos commentaires (après chaque commande git bisect bad/good
), en réduisant la recherche à chaque fois. Répétez le processus de test et de marquage jusqu'à ce que git identifie le premier mauvais commit.
7. Une fois que git a trouvé le commit problématique, il affiche un message indiquant le commit qui a introduit le bogue.
8. Examinez exactement ce qui a changé dans l'engagement identifié : git diff HEAD^!
9. Cette commande vous montre précisément quel code a été modifié dans la livraison qui a introduit le bogue, ce qui vous permet de concentrer vos efforts de débogage sur ces changements spécifiques.
10. Sortez de bisect à tout moment avec : git bisect reset
Vous reviendrez ainsi à la branche sur laquelle vous vous trouviez avant de commencer le processus de bissecturation.
11. Vous pouvez également automatiser le processus de bissection avec : git bisect run
Où est une commande qui renvoie 0 pour les bons commits et une valeur différente de zéro pour les mauvais commits.
Ce flux de travail réduit considérablement le temps de débogage, en particulier dans les grandes bases de code avec de nombreuses modifications entre l'état opérationnel et l'état non opérationnel.
Ces techniques d'analyse de l'histoire sont précieuses pour :
- Déterminer quand et pourquoi un bogue a été introduit
- Comprendre l'évolution d'un élément ou d'un composant
- Vérification des modifications pour les examens de sécurité
- Documenter le processus décisionnel à l'origine des modifications du code
En maîtrisant ces applications git diff avancées, vous serez en mesure de naviguer dans l'historique de votre projet avec précision, de déboguer les problèmes plus efficacement et d'obtenir des informations plus approfondies sur l'évolution de votre base de code.
Référence de la commande Git Diff
Git diff offre un large éventail d'options pour personnaliser sa sortie et son comportement dans des situations spécifiques. Voici une référence complète des paramètres les plus couramment utilisés pour améliorer votre analyse différentielle :
Options de comparaison de base
git diff
- Comparez le répertoire de travail à la zone de transitgit diff --staged
(ou--cached
)- Comparez la zone de transit à la dernière livraison.git diff HEAD
- Comparez le répertoire de travail au dernier commitgit diff
- Comparer le répertoire de travail à un commit spécifiquegit diff
- Comparez deux commits spécifiquesgit diff
- Comparez deux branches
Limitation de la trajectoire
git diff --
- Limiter la comparaison à un fichier ou un répertoire spécifiquegit diff --stat
- Afficher un résumé des modifications (fichiers modifiés, insertions, suppressions), une option très utile pour les grandes différences.git diff --name-only
- Afficher uniquement les noms des fichiers modifiésgit diff --name-status
- Afficher les noms et l'état (ajouté, modifié, supprimé) des fichiers modifiés
Contrôle de l'affichage
git diff -w
(ou --ignore-all-space) - Ignorer les changements d'espacementgit diff --ignore-space-change
- Ignorer les changements dans la quantité d'espaces blancsgit diff --color-words
- Montrez les différences entre les mots grâce à la couleurgit diff --word-diff
- Afficher les différences au niveau des mots dans un format différentgit diff -U
- Afficher n lignes de contexte (3 par défaut)git diff --no-prefix
- Ne pas afficher les préfixes a/ et b/ dans les résultats de diff.
Filtrage du contenu
git diff --binary
- Afficher les modifications apportées aux fichiers binairesgit diff -S
- Recherchez les changements qui ajoutent ou suppriment la chaîne de caractères spécifiée.git diff -G
- Recherchez les modifications qui correspondent au modèle d'expressions rationnelles spécifié.git diff --pickaxe-all
- Lorsque vous utilisez -S ou -G, affichez tous les changements dans le fichier, et pas seulement les changements correspondants.
Options de format
git diff --patch-with-stat
- Afficher le résumé des patchs et des statistiquesgit diff --compact-summary
- Afficher le résumé des statistiques dans un format compactgit diff --numstat
- Afficher les statistiques dans un format convivialgit diff --summary
- Afficher le résumé de la création/suppression
Ces options peuvent être combinées pour créer des comparaisons puissantes et ciblées. Par exemple, pour voir les changements au niveau des mots dans un fichier spécifique tout en ignorant les espaces blancs :
git diff --color-words -w -- analysis.py
Ou pour trouver tous les endroits où une fonction spécifique a été ajoutée ou supprimée :
git diff -S"def perform_advanced_analysis" main feature/advanced-analytics
La compréhension de ces options vous permet d'éliminer le bruit et de vous concentrer précisément sur les changements importants, ce qui rend vos flux de travail de révision et d'analyse du code plus efficaces. Que vous soyez à la recherche de bogues, que vous prépariez une demande d'extraction ou que vous essayiez simplement de comprendre ce qui a changé, la bonne option git diff peut vous faciliter la tâche de manière significative.
Conclusion
Tout au long de cet article, nous avons exploré git diff en tant que commande polyvalente pour visualiser les modifications de code. Nous avons abordé la comparaison des fichiers de travail avec les modifications mises en scène, l'examen des différences entre les branches et les commits, et l'utilisation de commandes spécialisées pour obtenir des informations plus approfondies. L'intégration de git diff dans votre flux de travail permet de créer des commits plus propres, de détecter les problèmes plus tôt et de faciliter les revues de code.
Que vous travailliez seul ou en équipe, la maîtrise de git diff vous permet de passer de la simple écriture de code à la compréhension de l'évolution de votre base de code au fil du temps.
Pour continuer à développer votre expertise Git, consultez ces ressources précieuses :
- L'aide-mémoire complet de L'aide-mémoire Git pour une référence rapide
- Introduction à Git pour les débutants cherchant à consolider les fondamentaux
- La pratique Tutoriel GitHub et Git pour les débutants pour un apprentissage pratique
- Git intermédiaire pour améliorer vos compétences en matière de stratégies de branchement et de techniques de collaboration
- Fondements de Git pour en savoir plus sur le modèle interne de Git et les flux de travail avancés.
Ces ressources vous aideront à développer ce que vous avez appris sur git diff et à élever votre maîtrise du contrôle de version à un niveau supérieur.
FAQ sur les Diff Git
Quelle est la différence entre git diff et git diff --staged ?
git diff
montre les changements entre votre répertoire de travail et la zone de mise en scène (changements non validés), tandis que git diff --staged
montre les changements entre votre zone de mise en scène et la dernière validation (ce qui sera validé par la suite).
Comment puis-je comparer les changements entre deux branches ?
Utilisez git diff branch1 branch2
pour voir toutes les différences entre les branches. Pour comparer des fichiers spécifiques, add -- path/to/file
après le nom des branches.
Comment ignorer les changements d'espaces dans git diff ?
Utilisez git diff -w
ou git diff --ignore-all-space
pour ignorer tous les changements d'espaces blancs, ce qui permet de se concentrer sur les différences de fond du code plutôt que sur le formatage.
Puis-je utiliser git diff pour savoir quand une modification spécifique a été introduite ?
Oui ! Utilisez git diff -S"search string"
pour savoir quand le texte a été ajouté/supprimé, ou combinez avec git log -p
pour voir l'évolution d'un code spécifique. Pour repérer les bogues, git bisect
avec diff est un outil puissant.
Comment puis-je afficher git diff d'une manière plus visuelle ?
Configurez les outils de comparaison externes avec git config diff.tool
pour utiliser des applications de comparaison visuelle telles que VSCode, Beyond Compare ou Meld, qui permettent des comparaisons côte à côte avec une meilleure visualisation.

Je suis un créateur de contenu en science des données avec plus de 2 ans d'expérience et l'un des plus grands followings sur Medium. J'aime écrire des articles détaillés sur l'IA et la ML dans un style un peu sarcastıc, car il faut bien faire quelque chose pour les rendre un peu moins ennuyeux. J'ai produit plus de 130 articles et un cours DataCamp, et un autre est en cours d'élaboration. Mon contenu a été vu par plus de 5 millions de personnes, dont 20 000 sont devenues des adeptes sur Medium et LinkedIn.
Les meilleurs cours de DataCamp
Cours
Intermediate Git
blog
Q2 2023 DataCamp Donates Digest
blog
Célébration de Saghar Hazinyar : Une boursière de DataCamp Donates et une diplômée de Code to Inspire

Fereshteh Forough
4 min
blog
Les 20 meilleures questions d'entretien pour les flocons de neige, à tous les niveaux

Nisha Arya Ahmed
15 min
blog
2022-2023 Rapport annuel DataCamp Classrooms
blog