diff copie de travail actuelle d'un fichier avec la copie validée d'une autre branche


158

J'ai un repo avec un fichier foodans la branche principale. Je suis passé à la branche bar et ai apporté quelques modifications à foo. Comment puis-je maintenant exécuter un git diffentre cette copie (qui n'est pas encore validée) et la copie de la branche principale?

Réponses:


151

Ce qui suit fonctionne pour moi:

git diff master:foo foo

Dans le passé, cela peut avoir été:

git diff foo master:foo


9
Chaque fois que je vois une de vos réponses concernant git diff, je pense toujours à stackoverflow.com/questions/5256249/git-diff-doesnt-show-enough/…
— VonC

@VonC: merci, c'est bien de savoir que cela valait la peine de les dessiner :) Au fait, comprenez-vous la bizarrerie avec laquelle j'ai mis à jour ma réponse?
— Mark Longair

2
Avez-vous essayé avec un --pour séparer les paramètres des arguments de chemin? git diff -- master:foo foo
— VonC le

1
Sur la version 1.8, git diff -- master:foo foone fonctionne pas - il semble traiter l'argument master:foocomme un nom de fichier inexistant (et l'ignore) au lieu d'un fichier dans une branche. Essayez de changer les 2 derniers arguments - si cela a fonctionné, la comparaison diff devrait être inversée, mais la sortie ne change pas.
— Kelvin le

9
Pour moi, c'est le contraire - je peux faire git diff master:foo foomais pas l'inverse. Je ne comprends pas non plus. Avec git 1.7.9.5 / Ubuntu 12.04, je peux au moins faire git diff -R master:foo foopour obtenir le diff que je veux réellement. Quand j'essaye cela avec msysgit 1.9.4 / Windows 7 x64 je reçois fatal: unable to read 0000000000000000000000000000000000000000. Sans -Rj'obtiens le même message d'erreur que vous avec git 1.7.9.5, mais avec 1.9.4 j'obtiens fatal: master:foo: no such path in the working tree.
— JMM

100

Vous essayez de comparer votre arbre de travail avec un nom de branche particulier, vous voulez donc ceci:

git diff master -- foo

Qui est de cette forme de git-diff (voir la page de manuel git-diff)

   git diff [--options] <commit> [--] [<path>...]
       This form is to view the changes you have in your working tree
       relative to the named <commit>. You can use HEAD to compare it with
       the latest commit, or a branch name to compare with the tip of a
       different branch.

Pour info, il existe également une option --cached(aka --staged) pour afficher le diff de ce que vous avez mis en scène, plutôt que tout dans votre arbre de travail:

   git diff [--options] --cached [<commit>] [--] [<path>...]
       This form is to view the changes you staged for the next commit
       relative to the named <commit>.
       ...
       --staged is a synonym of --cached.

2
Merci. Je ne sais pas pourquoi, mais seule cette réponse a fonctionné pour moi avec git 1.8.1 sous Linux.
— srking le

Excellent merci. Je me suis accroché à vouloir inclure le nom de ma branche actuelle dans la commande diff, mais je vois que ce n'est pas nécessaire.
— yoyo

Cela a fonctionné pour moi il y a quelques mois, mais ne semble pas l'être maintenant. Actuellement, je suis à la version 2.7.4 de git (Apple Git-66); Je ne sais pas ce que j'avais avant.
— hBrent

@hBrent cela fonctionne toujours pour moi sur OSX 10.11 avec git 2.7.3. Voici un exemple de dépôt rapide avec des instructions si cela est utile: github.com/jordan-brough/git-diff-test
— Jordan Brough

Merci @JordanBrough.
— hBrent le

14

Aussi: git diff master..feature foo

Puisque git diff foo master:foo ne fonctionne pas sur les répertoires pour moi.


Moi non plus. Est-ce une chose Windows?
— Scott Stafford

@ScottStafford Je suis sur Ubuntu, donc non, il ne semble pas que ce soit juste une chose Windows.
— ArtBIT

Fonctionne pour moi tant que je donne explicitement les deux noms de branche (Windows) git diff branch1:foo master:foo
— Meep

12
git difftool tag/branch filename

C'est la seule réponse qui a fonctionné pour moi pour la comparaison entre une copie de travail locale d'un fichier et cette version de fichier dans un référentiel distant (pas "origine"). Merci, Adir et Baz
— Souris

git difftooln'a pas d' -voption selon les documents git-scm.com/docs/git-difftool . Voulez-vous dire -y?
— ks1322

10
git diff mybranch master -- file

devrait aussi fonctionner


4
Cela ne fonctionne que pour les fichiers validés dans mybranch, pas pour la copie de travail actuelle du fichier.
— yoyo

que signifie "-" ci
— Pushparaj

Cela permet de comparer dans les deux sens: git diff deployment master -- fileet git diff master deployment -- filefonctionnent comme prévu avec 2 branches quelconques .
— viktorkho

0

Pour voir les changements locaux par rapport à votre succursale actuelle

git diff .

Pour voir les modifications locales comparées à toute autre branche existante

git diff <branch-name> .

Pour voir les modifications d'un fichier particulier

git diff <branch-name> -- <file-path>

Assurez-vous de courir git fetchau début.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.