173 votes

Comment faire la différence entre les modifications locales non validées et les modifications d'origine ?

Disons que j'ai cloné un dépôt et commencé à modifier des fichiers. Je sais que si j'ai des changements locaux non validés, je peux faire un diff comme suit git diff test.txt et il me montrera la différence entre le HEAD local actuel et les changements modifiés et non validés dans le fichier. Si je valide ces changements, je peux les comparer au dépôt original en utilisant la commande git diff master origin/master

Mais y a-t-il un moyen de différencier les changements locaux avec le dépôt original sur le serveur ? avant s'engager localement ? J'ai essayé plusieurs permutations de git diff --cached master origin/master sans succès.

155voto

JJD Points 7539

Étant donné que le référentiel distant a été mis en cache par l'intermédiaire de git fetch il devrait être possible de comparer avec ces commits. Essayez ce qui suit :

$ git fetch origin
$ git diff origin/master

51voto

Nate Points 870

Je sais que ce n'est pas une réponse à la question exacte posée, mais j'ai trouvé cette question en cherchant à diff fichier dans une branche et un fichier local non validé et je me suis dit que je partagerais

Syntaxe :

git diff <commit-ish>:./ -- <path>

Exemples :

git diff origin/master:./ -- README.md
git diff HEAD^:./ -- README.md
git diff stash@{0}:./ -- README.md
git diff 1A2B3C4D:./ -- README.md

(Merci à Eric Boehs pour avoir trouvé un moyen de ne pas avoir à taper le nom du fichier deux fois).

25voto

pepestar Points 269

Pour voir les changements non échelonnés (non ajoutés) aux fichiers existants

git diff

Notez que cela ne permet pas de suivre les nouveaux fichiers. Pour voir les changements échelonnés, non-commissionnés

git diff --cached

9voto

Caner Points 15625

Si vous voulez comparer des fichiers visuellement, vous pouvez utiliser :

git difftool

Il lancera votre application diff automatiquement pour chaque fichier modifié.

PS : Si vous n'avez pas mis en place une application diff, vous pouvez le faire comme dans l'exemple ci-dessous (j'utilise Winmerge ) :

git config --global merge.tool winmerge
git config --replace --global mergetool.winmerge.cmd "\"C:\Program Files (x86)\WinMerge\WinMergeU.exe\" -e -u -dl \"Base\" -dr \"Mine\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\""
git config --global mergetool.prompt false

2voto

Jeff Points 46

En général, la commande suivante peut le faire, qui obtient tous les détails sur les différences entre les branches (branche actuelle vs. une autre), y compris les changements non validés :

$ git diff origin/master

C'est différent de la commande ci-dessous, qui ignore les diffs pour les changements non validés :

$ git diff origin/master..develop

Vous pouvez ajouter quelques options pour filtrer les diffs :

$ git diff origin/master [--name-only] [--diff-filter=A] [<path>]

L'option ' --diff-filtre=A signifie filtrer ajouté fichiers de la branche origin/master. Cependant, si vous avez exécuté git rm avant cela, vous devrez d'abord pousser les changements dans git stash et ensuite restaurer le repo git et appliquer les changements cachés plus tard. Sinon, il n'affiche pas les bonnes différences comme prévu.

Il est donc utile de voir les différences avec une option --name-status pour le statut.

$ git diff origin/master [--name-status]

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