Comment vérifier si un commit Git a modifié un fichier spécifique

GitGitBeginner
Pratiquer maintenant

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans ce laboratoire (lab), vous apprendrez à vérifier si un commit Git spécifique a modifié un fichier particulier. Nous explorerons deux méthodes différentes pour y parvenir : en utilisant la commande git show --name-only pour obtenir un aperçu rapide des fichiers modifiés, et en utilisant la commande plus fondamentale git diff-tree avec les options appropriées pour identifier les modifications de fichiers au sein d'un commit.

Grâce à des exemples pratiques, vous verrez comment ces commandes fournissent des informations précieuses sur les modifications introduites par un commit, vous aidant à comprendre l'étendue et l'impact des commits historiques dans votre dépôt Git. Nous testerons également ces méthodes avec des fichiers non modifiés pour consolider votre compréhension.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL git(("Git")) -.-> git/BasicOperationsGroup(["Basic Operations"]) git(("Git")) -.-> git/BranchManagementGroup(["Branch Management"]) git/BasicOperationsGroup -.-> git/diff("Compare Changes") git/BranchManagementGroup -.-> git/log("Show Commits") subgraph Lab Skills git/diff -.-> lab-560068{{"Comment vérifier si un commit Git a modifié un fichier spécifique"}} git/log -.-> lab-560068{{"Comment vérifier si un commit Git a modifié un fichier spécifique"}} end

Exécuter git show --name-only

Dans cette étape, nous allons explorer comment afficher des informations sur un commit spécifique en utilisant la commande git show. Cette commande est incroyablement utile pour examiner les détails d'un commit, y compris les modifications qu'il a introduites.

Nous allons utiliser l'option --name-only avec git show. Cette option indique à Git d'afficher uniquement les noms des fichiers qui ont été modifiés dans le commit, ce qui est un moyen rapide de voir quels fichiers ont été affectés.

Tout d'abord, assurons-nous que nous sommes dans le répertoire de notre projet. Ouvrez votre terminal et accédez au répertoire my-time-machine :

cd ~/project/my-time-machine

Maintenant, utilisons git show avec l'option --name-only pour voir les fichiers modifiés dans notre dernier commit. N'oubliez pas que notre dernier commit était celui où nous avons ajouté message.txt.

git show --name-only HEAD

Ici, HEAD est un pointeur spécial dans Git qui fait référence au dernier commit de votre branche actuelle.

Vous devriez voir une sortie similaire à ceci :

commit a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9
Author: Jane Doe <[email protected]>
Date:   Mon Aug 7 10:00:00 2023 +0000

    Send a message to the future

message.txt

La sortie affiche les détails du commit (empreinte du commit, auteur, date et message), suivis du nom du fichier qui a été modifié dans ce commit, qui est message.txt.

L'utilisation de git show --name-only est un moyen rapide d'obtenir un résumé des fichiers qui ont été modifiés dans un commit spécifique sans voir le diff complet (les modifications réelles au sein des fichiers). Cela est utile lorsque vous voulez simplement connaître l'étendue d'un commit.

Utiliser git diff-tree pour les modifications de fichiers

Dans cette étape, nous allons explorer une autre façon de voir les fichiers modifiés dans un commit, en utilisant la commande git diff-tree. Alors que git show --name-only est une méthode courante, git diff-tree est une commande plus fondamentale qui montre les différences entre deux objets arborescents (qui représentent l'état de votre projet à un commit spécifique).

Nous allons utiliser git diff-tree avec les options -r et --name-only. L'option -r rend la commande récursive, ce qui signifie qu'elle examinera les sous-répertoires. L'option --name-only, comme avec git show, ne répertoriera que les noms des fichiers qui sont différents.

Tout d'abord, assurez-vous que vous êtes dans le répertoire my-time-machine :

cd ~/project/my-time-machine

Maintenant, utilisons git diff-tree pour voir les fichiers modifiés dans notre dernier commit. Nous avons besoin de l'empreinte du commit (l'identifiant unique) du commit. Vous pouvez obtenir cela à partir de la sortie de git log ou git show. Pour notre premier commit, vous pouvez également utiliser HEAD.

git diff-tree -r --name-only HEAD

Vous devriez voir une sortie similaire à ceci :

message.txt

Cette sortie est plus simple que celle de git show --name-only car git diff-tree est principalement axé sur l'affichage des différences entre les arborescences, et non sur les détails complets du commit. Lorsqu'il est utilisé avec --name-only, il ne répertorie que les fichiers qui ont été ajoutés, supprimés ou modifiés entre le parent du commit et le commit lui-même. Étant donné que notre premier commit n'avait pas de parent, il affiche les fichiers ajoutés dans ce commit.

Comprendre git diff-tree est utile car c'est une commande de bas niveau que d'autres commandes Git utilisent souvent en interne. Cela vous aide à comprendre comment Git suit les modifications entre différentes versions de votre projet.

Tester avec des fichiers non modifiés

Dans les étapes précédentes, nous avons vu comment git show --name-only et git diff-tree -r --name-only affichent les fichiers qui ont été modifiés dans un commit spécifique. Maintenant, voyons ce qui se passe lorsque nous exécutons ces commandes sur un commit où aucun fichier n'a été modifié (ce n'est pas le cas de notre seul commit, mais nous pouvons simuler l'idée).

Étant donné que notre dépôt actuel n'a qu'un seul commit où un fichier a été ajouté, l'exécution de ces commandes sur ce commit montrera toujours message.txt. Pour illustrer le concept d'affichage uniquement des fichiers modifiés, imaginons que nous ayons eu un commit qui n'a pas modifié aucun fichier (cela se produit généralement avec les commits de fusion ou les commits qui ne modifient que les métadonnées, mais pour cet exercice, nous nous concentrerons sur la sortie lorsqu'aucun fichier n'est répertorié).

Si vous deviez exécuter git show --name-only ou git diff-tree -r --name-only sur un commit qui n'a pas modifié aucun fichier, la partie de la sortie concernant les noms de fichiers serait vide.

Réexécutons les commandes que nous avons apprises pour renforcer le concept. Assurez-vous que vous êtes dans le répertoire my-time-machine :

cd ~/project/my-time-machine

Réexécutez git show --name-only :

git show --name-only HEAD

La sortie sera similaire à :

commit a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9
Author: Jane Doe <[email protected]>
Date:   Mon Aug 7 10:00:00 2023 +0000

    Send a message to the future

message.txt

Maintenant, réexécutez git diff-tree -r --name-only :

git diff-tree -r --name-only HEAD

La sortie sera :

message.txt

Les deux commandes affichent correctement message.txt car ce fichier a été introduit dans ce commit. Le point clé ici est que ces commandes sont conçues pour répertorier uniquement les fichiers qui ont été modifiés (ajoutés, supprimés ou modifiés) dans le commit spécifié. Si un commit ne modifie aucun fichier, ces commandes (plus précisément la partie de la liste des fichiers) n'afficheront rien.

Ce comportement est important pour comprendre l'étendue des modifications introduites par un commit. Il vous aide à identifier rapidement quelles parties de votre projet ont été affectées par un changement particulier.

Résumé

Dans ce laboratoire (lab), nous avons appris à vérifier quels fichiers ont été modifiés dans un commit Git spécifique. Nous avons exploré deux méthodes principales : l'utilisation de git show --name-only et de git diff-tree avec les options -r et --name-only.

Nous avons d'abord utilisé git show --name-only HEAD pour voir rapidement les noms des fichiers modifiés dans le dernier commit, démontrant son utilité pour obtenir un aperçu concis. Ensuite, nous avons introduit git diff-tree, une commande plus fondamentale, et l'avons utilisée avec les options -r et --name-only pour obtenir un résultat similaire, mettant en évidence son mécanisme sous - jacent pour comparer les objets arborescents (tree objects). Enfin, nous avons testé ces commandes avec des commits qui n'ont pas modifié de fichier spécifique pour confirmer leur comportement et notre compréhension.