git diff entre deux fichiers différents

111

Dans HEAD(le dernier commit), j'ai un fichier nommé foo. Dans mon arbre de travail actuel, je l'ai renommé en bar, et je l'ai également modifié.

Je veux git diff foodans HEADet bardans mon arbre de travail actuel.

MiJyn
la source
64
Je pensais que cette question (du titre) pourrait concerner l'utilisation de git diff sur deux fichiers qui ne sont pas nécessairement dans un dépôt. J'ai trouvé que le drapeau --no-index est pour cela, par exemple git diff --no-index --word-diff old_file.txt new_file.txt(--word-diff met en évidence les changements par mot, pas seulement par ligne, ce qui est très utile pour le texte long).
Pat

Réponses:

135

Spécifiez les chemins explicitement:

git diff HEAD:full/path/to/foo full/path/to/bar

Découvrez l' --find-renamesoption dans les git-diff documents .

Crédit: twaggs .

Steven Wexler
la source
9
Je tiens à mentionner que vous pouvez comparer deux fichiers en utilisant git diff <path> <path>même s'ils ne sont pas dans un référentiel git.
mitenka
1
@mitenka Je ne pense pas que ce soit correct. Si vous regardez, git diff --helpvous verrez que les seuls modèles pris en charge pour deux fichiers sont git diff [<options>] --no-index [--] <path> <path>. git diff a bne correspond qu'aux modèles de validation, pas aux fichiers.
Doug
@Doug Voici la citation de la commande d'aide que vous avez mentionnée, git-scm.com/docs/git-diff : Afficher les [...] changements entre deux fichiers sur le disque.
mitenka le
@mitenka dit l'aide, sauf si vous utilisez '--no-index', il ne compare pas les fichiers; votre commentaire doit être une réponse distincte; ce n'est pas vrai et ce n'est pas pertinent pour cette réponse.
Doug le
1
@Doug Merci pour votre avis. Voici la citation de l'aide à laquelle vous faites référence: Vous pouvez omettre l' --no-indexoption lors de l'exécution de la commande dans un arbre de travail contrôlé par Git et au moins l'un des chemins pointe en dehors de l'arbre de travail, ou lors de l'exécution de la commande en dehors d'un arbre de travail contrôlé par Git .
mitenka le
78

Je pense que l'utilisation --no-indexest ce que vous recherchez:

git diff [<options>] --no-index [--] <path> <path>

comme mentionné dans le manuel de git:

Ce formulaire permet de comparer les deux chemins donnés sur le système de fichiers. Vous pouvez omettre cette --no-indexoption lors de l'exécution de la commande dans un arbre de travail contrôlé par Git et au moins l'un des chemins pointe en dehors de l'arbre de travail, ou lors de l' exécution de la commande en dehors d' un arbre de travail contrôlé par Git.

mh sattarian
la source
1
@swe c'est certainement une réponse utile, mais l'OP a spécifiquement déclaré que le fichier est dans HEAD, ce qui signifie qu'il est dans un index git. La réponse acceptée répond directement à la question. La réponse acceptée avait également une longueur d'avance sur 6 ans;)
Michael Delgado
3
Cela n'a peut-être pas aidé OP, mais c'était exactement ce que je recherchais.
thislooksfun
Cela répond à la question posée par le titre, si vous esquiviez pour cela sur le Web.
Merlin
3

Si vous utilisez tortoise git, vous pouvez cliquer avec le bouton droit sur un fichier et git un diff en: cliquant avec le bouton droit sur le premier fichier et dans le sous-menu tortoisegit, sélectionnez "Diff later" Ensuite, sur le deuxième fichier, vous pouvez également faire un clic droit sur ce , allez dans le sous-menu tortoisegit puis sélectionnez "Diff avec votre nom de fichier ici.txt"

camjocotem
la source
-12

En utilisant PhpStorm, je copie juste le code de commit précédent et je le compare avec la version actuelle en utilisant l'outil intégré "comparer avec le presse-papiers".

Stevie Wonder
la source
5
PhpStorm est un IDE commercial. Cette question est de savoir comment faire cela dans le git cli lui-même, pas de présomption de logiciel supplémentaire.
Charles Taylor