Git Diff Expliqué : Un guide complet avec des exemples

Git diff est votre fenêtre sur les modifications intervenant dans votre dépôt de code. Fondamentalement, c’est une commande qui vous montre les différences entre les différents états de vos fichiers – que ce soit en comparant votre travail actuel avec ce que vous avez déjà mis en scène ou en comparant les changements entre les branches et les commits. Pensez-y comme la façon de Git de répondre à 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 changé et où.

Git diff aide les développeurs à garantir la qualité du code en fournissant une vue claire des modifications avant qu’elles ne soient validées. Ici, nous allons couvrir comment utiliser cette commande essentielle de manière efficace, des comparaisons de base aux techniques avancées qui amélioreront votre flux de développement et la collaboration en équipe.

Prérequis

Pour suivre ce tutoriel, vous devez être familier avec ces concepts Git :

  • Flux de travail Git de base (init, add, commit)
  • Référentiels Git et leur structure
  • Branches et leur fonctionnement
  • Commits et historique des commits
  • La zone de staging (index)

Si vous avez besoin de revoir ces concepts, ces ressources vous aideront :

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

Chaque développeur doit savoir ce qui a changé dans son code, que ce soit en travaillant seul ou au sein d’une équipe de centaines de personnes. Sans git diff, vous seriez laissé à deviner quelles lignes vous avez modifiées, rendant le dépannage et la collaboration presque impossibles.

Git diff est essentiel pour la gestion des changements et sert de base à la construction de logiciels de qualité grâce à des processus de révision efficaces. En examinant les changements, git diff fournit le contexte nécessaire pour comprendre non seulement ce qui a changé, mais pourquoi ces changements sont importants.

Cette visibilité directe sur l’évolution du code aide les équipes à maintenir des normes et à empêcher les bogues d’atteindre la production.

À mesure que les projets deviennent plus complexes, git diff devient vraiment indispensable pour plusieurs raisons clés :

  • Vérification des changements : Confirmez exactement ce que vous vous apprêtez à valider, prévenant l’inclusion accidentelle de code de débogage ou de changements non liés.
  • Transfert de connaissances : Comprendre ce que les coéquipiers ont fait sans avoir à lire des fichiers entiers
  • Résolution de conflits: Identifier précisément où et comment les changements entrent en conflit lors des fusions
  • Analyse historique :  Retrouver quand des changements spécifiques ont été introduits pour traquer les bugs ou comprendre l’évolution des fonctionnalités
  • Revues de code ciblées : Concentrez l’attention sur les parties du code qui ont réellement changé, gagnant du temps et améliorant la qualité de la revue

Pour utiliser efficacement git diff, il est nécessaire de comprendre l’architecture sous-jacente qui permet ces comparaisons – le modèle des « Trois Arbres » de Git.

L’architecture des Trois Arbres de Git

Pour comprendre git diff, vous devez d’abord saisir l’architecture fondamentale des « trois arbres » de Git. Malgré le nom, il ne s’agit pas de véritables arbres dans le système de fichiers, mais de trois états distincts où votre code existe.

Pensez à ces états comme trois versions différentes de votre projet que Git suit simultanément : le Répertoire de travail (vos fichiers réels), la Zone de staging (ou index, où les modifications sont préparées pour être validées), et le Dépôt (l’historique validé de votre projet stocké dans le répertoire .git).

Source : Hashnode

Le Répertoire de travail contient les fichiers que vous modifiez activement – c’est là que vous écrivez du code, apportez des modifications et testez votre travail. La Zone de staging agit comme une zone de préparation où vous sélectionnez quelles modifications doivent être incluses dans votre prochain commit. Vous pouvez la considérer comme un quai de chargement où les colis (vos modifications) sont organisés avant l’expédition.

Enfin, le Dépôt stocke l’historique complet de votre projet sous forme de commits, des instantanés de votre code à des moments spécifiques, liés ensemble 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 Staging, affichant les modifications que vous avez apportées mais n’avez pas encore mis en staging.

En utilisant git diff --staged compare la Zone de Staging au dernier commit, montrant ce qui sera inclus dans votre prochain commit.

Et git diff HEAD compare votre répertoire de travail directement au dernier commit, montrant toutes les modifications non validées indépendamment de leur statut de mise en staging.

Ces points de comparaison constituent la base de toutes les opérations de diff dans Git:

  • Répertoire de travail ↔ Zone de staging: Quels changements ai-je effectués mais pas encore mis en staging? (git diff)
  • Zone de staging ↔ Dépôt: Quels changements ai-je mis en staging qui seront commités ensuite? (git diff --staged)
  • Répertoire de travail ↔ Dépôt: 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 des points spécifiques de l’historique? (git diff commit1-hash commit2-hash)

Comprendre cette architecture vous donne le modèle mental nécessaire pour utiliser efficacement git diff afin de repérer précisément ce qui a changé, où et quand dans votre base de code.

Avec cette compréhension architecturale en place, nous pouvons maintenant explorer comment utiliser les commandes git diff en pratique pour obtenir des insights sur l’évolution de votre code à travers ces trois états.

Utilisation de base de Git Diff

Créons un projet d’analyse de données de démonstration pour illustrer l’action de git diff. Nous allons mettre en place un petit dépôt avec des scripts Python, des données CSV et des fichiers texte que nous pouvons modifier tout au long de ce tutoriel.

# Créer et initialiser notre projet mkdir data-analysis-project cd data-analysis-project git init # Créer des fichiers initiaux 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 # Faire notre premier commit git add . git commit -m "Initial commit with basic project structure" # Vérifier la structure du répertoire > 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 donne une base pour démontrer différents scénarios de différences. 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 changé. Modifions notre fichier analysis.py pour voir une différence en action:

# Mettre à jour analysis.py avec une nouvelle fonction 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 la différence git résultante:

git diff

Vous verrez une sortie similaire à ceci:

Remarque : Pour quitter la sortie git diff, appuyez sur « q » dans votre terminal.

Décomposons cette sortie :

  1. L’en-tête (diff --git a/analysis.py b/analysis.py) montre quel fichier est en cours de comparaison, qui est analysis.py
  2. Le métadonnées du fichier (index db0e049..a7a7ab0 100644) montre les identifiants internes de Git pour les versions avant et après
  3. Les marqueurs de fichier (--- a/analyse.py et +++ b/analyse.py) indiquent les fichiers « avant » et « après »
  4. Le en-tête de morceau (@@ -5,3 +5,6 @@) montre quelles lignes ont été affectées. Cette notation peut être interprétée comme :
  • -5,3 signifie qu’à partir de la ligne 5 du fichier d’origine, 3 lignes sont affichées dans la différence
  • +5,6 signifie qu’à partir de la ligne 5 du fichier modifié, 6 lignes sont affichées dans la différence
  • La différence entre ces chiffres indique que 3 lignes ont été ajoutées

5. Le contenu change avec des lignes commençant par + montrant des ajouts

Dans les fichiers plus volumineux, git diff regroupe les modifications en « hunks » – sections du fichier contenant des changements. Chaque hunk 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 staging

En exécutant git diff sans arguments, vous comparez votre répertoire de travail (état actuel des fichiers) à la zone de staging (changements prêts à être validés). Cela est utile pour vérifier ce que vous avez modifié mais n’avez pas encore préparé pour votre prochain commit.

Modifions plusieurs fichiers pour démontrer :

# Mettre à jour 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 # Mettre à jour data.csv echo "id,name,value\n1,alpha,10\n2,beta,20\n3,gamma,30\n4,delta,40" > data.csv

Staggeons maintenant uniquement les changements du README.md :

git add README.md

Exécuter git diff maintenant affichera uniquement les modifications non mises en scène dans data.csv et le fichier analysis.py ci-dessus :

Cela vous aide à 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 de README.md qui sont mises en scène et prêtes à être engagées. Ce flux de travail est crucial pour construire des engagements propres et logiques. Vous pouvez mettre en scène des portions de votre travail qui ont du sens ensemble, examiner le diff mis en scène pour vérifier que c’est une unité de changement cohérente, puis l’engager.

Comparaison de la zone de staging et du dernier engagement

La commande git diff --staged compare votre zone de staging à votre dernier commit. Cela vous montre exactement ce qui sera inclus dans votre prochain commit si vous exécutez git commit maintenant.

Mettons en scène nos modifications de data.csv et examinons ce qui est en attente :

git add data.csv git diff --staged

La sortie montrera maintenant des modifications tant dans README.md que dans data.csv, car les deux ont été mis en scène. Cette étape de révision est critique avant de commettre — elle agit comme votre dernière ligne de défense contre la soumission de modifications non intentionnelles.

Un flux de travail courant pourrait ressembler à :

  1. Apportez des modifications à plusieurs fichiers
  2. Exécutez git diff pour examiner toutes les modifications
  3. Utilisez git add <fichier> sélectivement pour mettre en scène des groupes logiques de modifications
  4. Exécutez git diff --staged pour vérifier ce qui va être validé
  5. Validez les modifications mises en scène avec git commit -m "Votre message"
  6. Répétez pour d’autres groupes logiques de modifications

Cette approche méthodique aide à maintenir un historique de validation propre et significatif qui facilite la compréhension de l’évolution de votre projet et permet de repérer où des problèmes ont pu être introduits. Avec de l’expérience, ces commandes diff deviendront des réflexes, servant de compagnons constants dans le processus de développement.

Effectuons nos validations avant de passer à l’étape suivante :

# data.csv et README.md doivent être validés git commit -m "Modify data.csv and README.md files" # Mettez en scène et validez 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 différenciation Git

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 illustrer 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 validations 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 développer une fonctionnalité et apportons des modifications :

# Créer et passer à une nouvelle branche git checkout -b feature/advanced-analytics # Modifier le fichier analysis.py avec une nouvelle fonction 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 # Valider les changements git add analysis.py git commit -m "Add advanced analysis function"

Maintenant, nous pouvons 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 Entrée car la différence complète est tronquée dans le terminal).

Pour comparer avec un commit spécifique, vous pouvez utiliser le hachage 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 :

  • Vous vous préparez pour des revues de code en voyant tous les changements dans une branche de fonctionnalités
  • Vérifier quels changements une branche de votre collègue introduirait avant fusion
  • Comprendre comment votre base de code a évolué entre les versions ou les releases

Comparer des fichiers spécifiques

Lorsque vous travaillez avec de grands dépôts, vous souhaitez souvent vous concentrer sur les changements apportés à des fichiers ou répertoires spécifiques plutôt que de voir toutes les différences. Git diff facilite cela en vous permettant de spécifier des chemins.

Faisons des changements sur plusieurs fichiers :

# Mettre à jour config.txt echo "DEBUG=True DATABASE_PATH=./data/ LOG_LEVEL=INFO" > config.txt # Mettre à jour 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 changements uniquement sur le fichier config :

git diff config.txt

Ou pour comparer un fichier spécifique entre les branches :

# Comparer le fichier analysis.py entre les branches main et feature/advanced-analytics git diff main feature/advanced-analytics -- analysis.py

Le -- dans la commande ci-dessus aide Git à distinguer entre les références et les chemins de fichiers. C’est particulièrement utile lorsque :

  • Travailler dans des dépôts avec de nombreux fichiers mais se concentrer sur des composants spécifiques (ce qui sera souvent le cas)
  • Vérifier comment la configuration a changé entre les branches
  • Passer en revue uniquement les fichiers les plus critiques dans un grand ensemble de modifications

Options de différences contextuelles

Git diff propose plusieurs options pour ajuster l’affichage des différences, facilitant ainsi la focalisation sur les modifications significatives.

Par exemple, lorsqu’il s’agit de modifications de formatage de code, les différences de whitespace peuvent obscurcir des changements sémantiques importants. Illustrons cela avec un changement de formatage :

# Faire un changement de whitespace à analysis.py sed -i '' 's/ return/ return/g' analysis.py # Reduce indentation

Maintenant, en comparant avec la commande git diff standard, les changements de whitespace sont affichés (remarquez comment les instructions return ne sont pas 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 de whitespace (cela ne montre aucun changement car nous avons seulement supprimé des espaces) :

git diff -w analysis.py # or --ignore-all-space

Une autre option utile est de contrôler les lignes de contexte – les lignes inchangées affichées autour des 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 précieuses lorsque :

  • Vous passez en revue du code qui a été soumis à un formatage automatisé
  • Vous vous concentrez sur les changements fonctionnels plutôt que sur les changements de style
  • Vous avez besoin de plus de contexte pour comprendre un changement particulier
  • Vous travaillez avec de grands fichiers où un contexte par défaut générerait trop de sortie

En maîtrisant ces techniques intermédiaires, vous aurez un contrôle beaucoup plus fin sur la manière dont vous passez en revue et comprenez les changements dans votre base de code, ce qui rendra votre flux de développement plus efficace et vos revues de code plus efficaces.

Commettons les derniers changements avant de passer à des applications git diff avancées :

git add . git commit -m "Modify analysis.py, config.txt, and utils.py"

Applications Avancées de Git Diff

S’appuyant sur notre compréhension des techniques intermédiaires de git diff, explorons des applications avancées qui vous permettront de perfectionner vos compétences Git. Ces techniques avancées sont particulièrement utiles lors du travail sur des bases de code complexes ou en collaboration avec des équipes plus importantes.

Utilisation d’outils de diff externes

Bien que le diff intégré de Git soit puissant, parfois un outil de diff visuel offre une meilleure clarté, surtout pour des changements complexes. Git vous permet de configurer des outils externes pour améliorer votre expérience de diff.

Configurons un outil de diff visuel populaire. Nous utiliserons VSCode comme exemple, mais une configuration similaire fonctionne pour des outils comme Beyond Compare, Meld ou KDiff3:

# Configurer Git pour utiliser VSCode comme outil de diff (spécifique au projet) git config diff.tool vscode git config difftool.vscode.cmd "code --wait --diff \$LOCAL \$REMOTE" # Pour utiliser d'autres outils populaires, vous pourriez utiliser : # Pour Beyond Compare (spécifique au projet) : git config diff.tool bc3 git config difftool.bc3.path "/path/to/beyond/compare" # Commandes d'installation : # Pour Beyond Compare : # Sur macOS : brew install --cask beyond-compare # Sur Ubuntu : sudo apt-get install beyond-compare # Sur Windows : Téléchargez depuis https://www.scootersoftware.com/download.php # Remarque : Pour appliquer ces paramètres de manière globale au lieu de simplement au projet actuel, # ajoutez le drapeau --global à chaque commande, par exemple : # 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érenciation visuelle configuré pour afficher les modifications. Voici à quoi ressemble Beyond Compare :

Les outils de différenciation visuelle offrent plusieurs avantages :

  1. Comparaison côte à côte facilitant la visualisation du contexte
  2. Mise en évidence de la syntaxe conforme à vos préférences d’éditeur
  3. Navigation avancée entre les modifications
  4. Capacité d’éditer les fichiers directement tout en examinant les différences

Lors de l’examen de modifications importantes ou de fichiers avec des structures complexes (comme des JSON ou XML imbriqués), les outils de différenciation visuelle peuvent améliorer considérablement la compréhension et l’efficacité.

Commandes de différenciation spécialisées

Git propose des commandes de différenciation spécialisées qui offrent un contrôle plus précis 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) :

# Obtenir le hachage des deux derniers commits LAST_COMMIT=$(git rev-parse HEAD) PREV_COMMIT=$(git rev-parse HEAD~1) # Afficher les modifications dans le dernier commit git diff-tree --patch $PREV_COMMIT $LAST_COMMIT

git diff-index compare le répertoire de travail avec l’index (zone de staging) ou un arbre :

# Comparer le répertoire de travail avec l'index git diff-index --patch HEAD

git diff-index est particulièrement utile pour les scripts et l’automatisation. Il vous permet de vérifier de manière programmable quels changements seraient inclus dans votre prochain commit, ce qui le rend précieux pour les hooks pré-commit et les scripts de validation.

Par exemple, vous pourriez 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 commits.

git diff-files montre les différences entre les fichiers dans le répertoire de travail et l’index :

# Vérifier les différences pour des fichiers spécifiques git diff-files --patch config.txt

Ces commandes spécialisées sont particulièrement utiles pour :

  • Créer des workflows et des scripts Git personnalisés
  • Déboguer des problèmes avec les aspects internes de Git
  • Réaliser une analyse ciblée de l’état du dépôt
  • Créer des outils d’automatisation qui interagissent avec Git

Analyser l’historique du code

Une des applications les plus puissantes de git diff est d’analyser comment le code a évolué avec le temps, ce qui peut être crucial pour le débogage ou la compréhension du développement de fonctionnalités.

Examinons un commit spécifique en utilisant la notation spéciale ^! :

# Obtenez le hachage de notre commit d'analyse avancée ANALYTICS_COMMIT=$(git log --oneline | grep "advanced analysis" | cut -d ' ' -f 1) # Affichez uniquement les changements introduits dans ce commit spécifique git diff $ANALYTICS_COMMIT^!

La syntaxe ^! est un raccourci pour comparer un commit avec son parent, montrant exactement ce qui a changé dans ce seul commit.

Pour retracer l’évolution d’un fichier spécifique au fil du temps :

# Analysez comment analysis.py a changé au cours des 3 derniers commits git log -p -3 analysis.py

Lors de la recherche d’un bug, vous pouvez utiliser git diff avec git bisect :

# Ajoutez un bug pour simuler une régression echo "import pandas as pd import numpy as np def load_data(filename): # Bug : retourner accidentellement None au lieu des données 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" # Utilisez maintenant git bisect pour trouver quand le bug a été introduit 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 va vérifier les commits pour que vous les testiez # Une fois trouvé, vous pouvez examiner le changement exact qui a introduit le bug git diff HEAD^!

Git bisect est un puissant outil de débogage qui effectue une recherche binaire dans l’historique de vos commits pour trouver quel commit a introduit un bug. Associé à 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 commit connu comme bon (où le bogue n’existe pas) avec git bisect good <commit-hash>

4. Git vérifie automatiquement un commit au milieu de votre historique pour que vous le testiez.

5. Après avoir testé le commit actuel, informez git du 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 retours (après chaque commande git bisect bad/good), réduisant ainsi la recherche à chaque fois. Répétez le processus de test et de marquage jusqu’à ce que git identifie le premier commit défectueux.

7. Une fois que git trouve le commit problématique, il affichera un message indiquant quel commit a introduit le bogue.

8. Examinez exactement ce qui a changé dans le commit identifié avec : git diff HEAD^!

9. Cette commande vous montre précisément quel code a été modifié dans le commit qui a introduit le bogue, vous permettant de concentrer vos efforts de débogage sur ces changements spécifiques.

10. Sortez de la bissection à tout moment avec : git bisect reset Cela vous ramènera à la branche sur laquelle vous étiez avant de commencer le processus de bissection.

11. Vous pouvez également automatiser le processus de bissection avec : git bisect run <script-test>script-test est une commande qui renvoie 0 pour les bons commits et une valeur non nulle pour les mauvais commits.

Ce flux de travail réduit considérablement le temps de débogage, en particulier dans les grands codes avec de nombreux commits entre les états de travail et les états cassés.

Ces techniques d’analyse de l’historique sont inestimables pour :

  • Trouver quand et pourquoi un bug a été introduit
  • Comprendre l’évolution d’une fonctionnalité ou d’un composant
  • Auditer les changements pour les revues de sécurité
  • Documenter le processus de prise de décision derrière les changements de code

En maîtrisant ces applications avancées de git diff, vous pourrez naviguer dans l’historique de votre projet avec précision, déboguer les problèmes de manière plus efficace et obtenir des informations plus approfondies sur l’évolution de votre base de code.

Référence de la commande Git Diff

Git diff offre une large gamme d’options pour personnaliser sa sortie et son comportement pour 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 – Comparer le répertoire de travail à la zone de staging
  • git diff --staged (ou --cached) – Comparer la zone de staging au dernier commit
  • git diff HEAD – Comparer le répertoire de travail au dernier commit
  • git diff <commit> – Comparer le répertoire de travail à un commit spécifique
  • git diff <commit1> <commit2> – Comparer deux validations spécifiques
  • git diff <branch1> <branch2> – Comparer deux branches

Limitation de chemin

  • git diff -- <path> – Limiter la comparaison à un fichier ou répertoire spécifique
  • git diff --stat – Afficher un résumé des changements (fichiers modifiés, insertions, suppressions), une option très utile pour les différences importantes
  • git diff --name-only – Afficher uniquement les noms des fichiers modifiés
  • git diff --name-status – Affiche les noms et le statut (ajouté, modifié, supprimé) des fichiers modifiés

Affichage de contrôle

  • git diff -w (ou –ignore-all-space) – Ignorer les changements d’espaces
  • git diff --ignore-space-change – Ignorer les changements de quantité d’espaces
  • git diff --color-words – Afficher les différences au niveau des mots avec des couleurs
  • git diff --word-diff – Afficher les différences au niveau des mots dans un format différent
  • git diff -U<n> – Afficher n lignes de contexte (par défaut, c’est 3)
  • git diff --no-prefix – Ne pas afficher les préfixes a/ et b/ dans la sortie de la différence

Filtrage du contenu

  • git diff --binary – Afficher les modifications apportées aux fichiers binaires
  • git diff -S<string> – Rechercher les modifications qui ajoutent ou suppriment la chaîne spécifiée
  • git diff -G<regex> – Rechercher les modifications qui correspondent au motif regex spécifié
  • git diff --pickaxe-all – Lors de l’utilisation de -S ou -G, afficher toutes les modifications dans le fichier, pas seulement celles correspondantes

Options de format

  • git diff --patch-with-stat – Afficher le patch et le résumé des statistiques
  • git diff --compact-summary – Afficher un résumé des statistiques sous une forme compacte
  • git diff --numstat – Afficher les statistiques dans un format adapté aux machines
  • git diff --summary – Afficher un résumé de création/suppression

Ces options peuvent être combinées pour créer des comparaisons ciblées et puissantes. Par exemple, pour voir les changements au niveau des mots dans un fichier spécifique en ignorant les espaces blancs :

git diff --color-words -w -- analysis.py

Ou pour trouver tous les endroits où une fonction spécifique a pu être ajoutée ou supprimée :

git diff -S"def perform_advanced_analysis" main feature/advanced-analytics

Comprendre ces options vous aide à vous débarrasser du bruit et à vous concentrer précisément sur les changements qui comptent, rendant vos workflows d’examen de code et d’analyse plus efficaces. Que vous cherchiez des bugs, vous prépariez à une demande de tirage (pull request) ou simplement essayiez de comprendre ce qui a changé, la bonne option de différenciation git peut rendre votre tâche significativement plus facile.

Conclusion

Tout au long de cet article, nous avons exploré git diff en tant que commande polyvalente pour visualiser les changements de code. Nous avons abordé la comparaison des fichiers de travail par rapport aux changements mis en staging, examiné les différences entre les branches et les commits, et utilisé des commandes spécialisées pour des insights plus approfondis. Intégrer git diff dans votre flux de travail aide à construire des commits plus propres, à repérer les problèmes tôt, et à faciliter de meilleures revues de code.

Que vous travailliez seul ou en équipe, maîtriser git diff vous élève au-delà de la simple écriture de code pour comprendre comment votre base de code évolue dans le temps.

Pour continuer à développer votre expertise Git, consultez ces ressources précieuses :

Ces ressources vous aideront à approfondir vos connaissances sur git diff et à élever votre maîtrise du contrôle de version au niveau supérieur.

Source:
https://www.datacamp.com/tutorial/git-diff-guide