git diff deux fichiers sur la même branche, même commit

97

désolé si cette question existe, je ne l'ai étonnamment pas trouvée: /

Comment puis-je effectuer un git diffentre deux fichiers dans la même branche et le même commit?

c'est à dire git diff fileA.php fileB.php

(idéalement avec le code couleur facile à lire qui gitoffre ... ou similaire à ce que fait le programme BeyondCompare!)

d -_- b
la source
Remarque: Git: Comment différencier deux fichiers différents dans des commits différents? est légèrement plus générale que cette question, mais la réponse est essentiellement la même que la bonne réponse à celle-ci , et elle n'a pas toutes ces fausses réponses, j'ai donc voté pour la fermer comme une dupe.
SamB

Réponses:

84

Vous n'avez pas besoin de git pour cela, utilisez simplement diff fileA.php fileB.php(ou vimdiff si vous voulez une comparaison côte à côte)

JaredMcAteer
la source
22
vimdiffpour la victoire! Merci!
d -_- b
24
Cela peut fonctionner, mais ce n'est pas git diff. C'est un format de sortie complètement différent.
daboross
11
Cela ne répond pas à la question d'origine
DylanYoung
8
Je ne suis pas d'accord, le PO n'était pas clair mais le fait qu'il mentionne BeyondCompare implique qu'il ne recherche pas spécifiquement un git diffdiff mais simplement un diff facile à lire. Aussi le fait qu'il ait accepté ma réponse comme ce qu'il cherchait indique également qu'il y répond en fait.
JaredMcAteer
3
lisez attentivement la réponse. la commande n'est diff fileA fileBpasgit diff fileA fileB
Matthew Hinea
247

Si vous souhaitez utiliser git diffsur deux fichiers arbitraires, vous pouvez utiliser git diff --no-index <file_a> <file_b>. Les deux fichiers n'ont pas besoin d'être suivis gitpour que cela fonctionne.

rzrgenesys187
la source
32
+1 car il répond à la question initiale (indépendamment de "pourquoi feriez-vous cela" ... il peut y avoir des raisons)
NobodysNightmare
19
--word-diffmet en évidence les changements par mot, pas seulement par ligne
user3148949
2
Pour ceux d'entre nous qui utilisent PowerShell, c'est un moyen beaucoup plus simple d'obtenir un diff de deux fichiers dans un dépôt.
Jay Soyer
2
Comment cette excellente réponse est-elle listée ci-dessous 2 réponses plus tôt, moins votantes (et moins utiles) lors du tri par "actif" ??? Je ne compte même pas la réponse marquée comme correcte. Bref, merci!
j_random_hacker
@daboross Dans GNU diffutils 3.4+ (2016-08-08), diffa --color, ce qui pourrait aider (voir unix.stackexchange.com/a/338960 ). Mais même dans ce cas, s'il est utilisé diff-so-fancy, il semble nécessiter le format de sortie spécifique de git diff. diff -u(voir stackoverflow.com/a/4857407/10095231 ) ne fonctionne pas.
kelvin
14

Si les fichiers que vous souhaitez comparer sont dans votre copie de travail, vous pouvez les utiliser simplement diffcomme indiqué par les autres, mais si les fichiers sont dans une révision, vous pouvez spécifier une révision pour chaque fichier

git diff <revision_1>:<file_1> <revision_2>:<file_2>

comme indiqué ici: https://stackoverflow.com/a/3343506/1815446

Dans votre cas (en spécifiant la même révision pour les deux fichiers):

git diff <revisionX>:fileA.php <revisionX>:fileB.php
Pau Fracés
la source
Remarque: Une révision peut être HEAD~2, un SHA-1, un nom de branche, etc.
ma11hew28
Cela a fonctionné pour moi, en comparant simplement les noms de fichiers de deux répertoires différents: git diff --name-only HEAD:dir1 HEAD:dir1_backup fonctionne après un git adddes deux répertoires.
Frank Forte
1
Cela fonctionne si la révision n'est pas extraite dans l'arborescence de travail, ou si les fichiers de l'arborescence de travail sont modifiés et que l'on souhaite différencier les originaux, ou s'il n'y a pas d'arbre de travail du tout, comme dans un repo git nu. Il est malheureux que cette question hautement cotée ait des réponses très appréciées qui répondent à une question encore utile, mais assez différente, "comment puis-je obtenir une sortie de type git-diff sans utiliser git?"
TrentP
4

Pour que gnu diff normal ressemble plus à git diff, je recommanderais ces paramètres:

diff -burN file_or_dir1 file_or_dir2

(où -bignorer les espaces, -udiff unifié, -rrécursif, -Ntraiter les fichiers manquants comme /dev/null).

Cela fonctionne très bien, mais n'a toujours pas de couleurs et la pagination automatique de style git est pratiquement absente. Si vous voulez réparer les deux (je le fais), installez-le colordiffet utilisez-le comme ceci:

colordiff -burN file_or_dir1 file_or_dir2 | less -R

Cela donne une sortie et une interface très proches du réel git diff.

mvp
la source
4
-1 parce que "vous ne pouvez pas" est incorrect (voir: stackoverflow.com/a/13965200/968531 )
NobodysNightmare
Supprimez le "vous ne pouvez pas", ajoutez des instructions pour installer colordiff et cela pourrait être une réponse OK à la question d'origine.
DylanYoung
0

Si vous souhaitez comparer deux fichiers locaux dans le même répertoire, utilisez simplement diff.

diff fileA.php fileB.php
Matt Lacey
la source
Cela ne répond pas à la question d'origine
DylanYoung
-4

Utilisez simplement des différences régulières.

diff -Nua fileA.php fileB.php
Peter van der fait
la source
8
-1 parce que "vous ne pouvez pas" est incorrect (voir: stackoverflow.com/a/13965200/968531 )
NobodysNightmare