Pour voir en quoi un fichier suivi diffère d’une version antérieure dans un dépôt Git sur votre Mac, ouvrez le Terminal, déplacez-vous dans le dépôt et exécutez git diff REVISION -- path/to/file. Remplacez REVISION par un commit tel que HEAD~1 et le chemin par le chemin du fichier relatif au dépôt. Cela compare cette version commitée avec le fichier tel qu’il existe actuellement dans votre arbre de travail ; cela ne modifie pas le fichier.
Ouvrir le Terminal dans le dépôt
Dans le Finder, localisez le dossier du dépôt. Ouvrez le Terminal, tapez cd suivi d’un espace, faites glisser le dossier du dépôt dans la fenêtre du Terminal, puis appuyez sur Retour. Apple documente le glisser-déposer d’éléments dans le Terminal comme un moyen de spécifier des chemins de fichiers et de dossiers. Vérifiez que vous êtes bien dans un arbre de travail Git avec :
git status
Si Git indique que le répertoire actuel n’est pas un dépôt, placez-vous dans le dossier racine du dépôt et réessayez. Selon Apple, le Terminal utilise zsh par défaut sur macOS. Les commandes ci-dessous fonctionnent dans ce shell ; elles utilisent des chemins entre guillemets afin de préserver les espaces dans les noms.
Comparer le fichier actuel avec une révision antérieure
Utilisez cette syntaxe :
git diff REVISION -- "path/to/file"
Par exemple, pour comparer le fichier actuel Sources/Menu.swift avec sa version située un commit premier-parent avant le HEAD actuel, exécutez :
git diff 'HEAD~1' -- "Sources/Menu.swift"
Le -- marque la fin des arguments de révision et d’options ainsi que le début du chemin. Git documente cette forme comme comparant l’arbre de travail avec le commit spécifié. Dans la sortie, les lignes commençant par - proviennent de la version antérieure, les lignes + proviennent du fichier actuel, et les lignes environnantes sans marque fournissent le contexte. Documentation de git diff
HEAD~1 désigne le premier parent du commit actuel ; HEAD~2 remonte deux étapes de premier-parent. C’est pratique pour l’historique récent, mais cela peut ne pas identifier la modification exacte que vous visez, particulièrement autour des fusions. La syntaxe de révision de Git accepte également les noms de branches, les tags et les identifiants de commit. Utilisez un commit que vous avez repéré lorsque vous avez besoin d’un point historique précis. Syntaxe de révision Git
Pour trouver un commit ayant modifié le fichier, inspectez son historique :
git log --oneline -- "Sources/Menu.swift"
Copiez l’identifiant de commit pertinent dans la sortie, puis utilisez-le dans la commande diff :
git diff 4f2a9c1 -- "Sources/Menu.swift"
Remplacez 4f2a9c1 par l’identifiant réel affiché dans votre dépôt. Git accepte un identifiant de commit abrégé non ambigu ; s’il est ambigu ou invalide, utilisez un identifiant plus long ou un autre nom de révision.
Choisir la comparaison qui correspond à votre besoin
Une comparaison avec l’arbre de travail inclut toutes les modifications actuelles apportées au fichier, qu’elles soient indexées (staged) ou non. Si vous souhaitez plutôt comparer deux versions commitées, fournissez les deux révisions :
git diff OLD_REV NEW_REV -- "Sources/Menu.swift"
Par exemple, git diff 'HEAD~3' HEAD -- "Sources/Menu.swift" compare le fichier commité trois étapes de premier-parent en arrière avec la version au commit actuel. Cela n’inclut pas les modifications non commitées. Git décrit la syntaxe à deux commits comme comparant deux commits arbitraires. Documentation de git diff
Si vous souhaitez comparer avec la version indexée pour le prochain commit, la syntaxe --cached de Git compare l’index avec un commit. Par exemple :
git diff --cached HEAD -- "Sources/Menu.swift"
Cela répond à une question différente de la comparaison avec le fichier de travail actuel : cela montre les modifications indexées par rapport à HEAD.
Comprendre une sortie vide et les erreurs fréquentes
L’absence de sortie diff signifie généralement que Git ne détecte aucune différence pour ce chemin entre la révision choisie et l’état actuel sélectionné. Confirmez l’orthographe du chemin et la casse, et assurez-vous d’être dans le bon dépôt. Si Git indique que le chemin est inconnu à cette révision, le fichier n’existait peut-être pas encore, ou le chemin a peut-être changé. Pour inspecter un fichier renommé ou supprimé, utilisez son chemin historique et vérifiez la liste des fichiers ou le log du commit concerné.
Un fichier que Git n’a jamais suivi n’a aucune version commitée avec laquelle être comparé. De plus, le diff textuel ordinaire de Git peut ne pas fournir de comparaison ligne par ligne lisible pour les fichiers binaires. La commande affiche les modifications ; elle ne restaure pas l’ancienne version. Évitez git checkout ou git restore lorsque votre but est seulement d’inspecter, car ces commandes ont des effets différents sur les fichiers.
Pour un examen plus resserré, ajoutez un petit nombre de lignes de contexte, comme git diff -U1 'HEAD~1' -- "Sources/Menu.swift". L’option -U de Git contrôle le nombre de lignes de contexte environnantes qui s’affichent. Une fois que vous disposez de la révision et du chemin souhaités, cette commande offre une vue directe et reproductible des différences tout en laissant votre fichier intact.
Sources
Modifier le shell par défaut dans Terminal sur Mac — Assistance Apple
Faire glisser des éléments dans une fenêtre de Terminal — Assistance Apple