181 votes

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

J'ai un repo avec un fichier foo dans la branche master. Je suis passé à la branche bar et j'ai fait quelques changements à foo . Comment puis-je maintenant exécuter un git diff entre cette copie (qui n'est pas encore validée) et la copie de la branche master ?

180voto

Mark Longair Points 93104

Ce qui suit fonctionne pour moi :

git diff master:foo foo

Dans le passé, cela a pu être le cas :

git diff foo master:foo

9 votes

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/

0 votes

@VonC : merci, c'est agréable de savoir que ça valait la peine de les dessiner :) Au fait, est-ce que tu comprends la bizarrerie avec laquelle j'ai mis à jour ma réponse ?

2 votes

Avez-vous essayé avec un -- afin de séparer les paramètres des arguments de chemin ? git diff -- master:foo foo

110voto

Jordan Brough Points 2408

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

git diff master -- foo

Qui provient de cette forme de git-diff (voir la page de manuel de 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 un --cached (alias --staged ) pour visualiser le différentiel de ce que vous avez mis en scène, plutôt que tout ce qui se trouve 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 votes

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

0 votes

Excellent, merci. J'étais bloqué par le fait de vouloir inclure le nom de ma branche actuelle dans la commande diff, mais je vois que ce n'est pas nécessaire.

0 votes

Cela a fonctionné pour moi il y a quelques mois, mais ne semble plus 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.

16voto

Adir Points 51
git difftool tag/branch filename

0 votes

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 repo distant (pas "origine"). Merci, Adir et Baz

0 votes

git difftool n'a pas -v option selon la documentation git-scm.com/docs/git-difftool . Voulez-vous dire -y ?

14voto

ArtBIT Points 1672

Aussi : git diff master..feature foo

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

0 votes

Moi non plus. C'est un truc de Windows ?

0 votes

@ScottStafford Je suis sous Ubuntu, donc non, il semble que ce ne soit pas seulement un problème de Windows.

0 votes

Cela fonctionne pour moi tant que je donne explicitement les noms des deux branches (Windows). git diff branch1:foo master:foo

10voto

Naoise Golden Points 2969
git diff mybranch master -- file

devrait également fonctionner

4 votes

Cela ne fonctionne que pour les fichiers livrés à mybranch, pas pour la copie de travail actuelle du fichier.

0 votes

Que signifie "--" ci-dessus

0 votes

Cela permet de comparer dans les deux sens : git diff deployment master -- file et git diff master deployment -- file fonctionnent comme prévu avec 2 branches quelconques .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X