web-dev-qa-db-fra.com

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

Disons que j'ai cloné un référentiel et commencé à modifier des fichiers. Je sais que si j'ai des modifications locales non validées, je peux faire un diff comme suit git diff test.txt et il me montrera la différence entre le HEADlocal en cours et les modifications modifiées et non validées du fichier. Si je valide ces modifications, je peux les comparer au référentiel d'origine en utilisant git diff master Origin/master

Mais existe-t-il un moyen de différencier les modifications locales avec le référentiel d'origine sur le serveur avant commettre localement? J'ai essayé diverses permutations de git diff --cached master Origin/master sans succès.

130
Chaitanya

Étant donné que le référentiel distant a été mis en cache via git fetch, il devrait être possible de comparer ces validations. Essayez ce qui suit:

$ git fetch Origin
$ git diff Origin/master
124
JJD

Je sais que ce n'est pas une réponse à la question exacte posée, mais j'ai trouvé cette question qui cherchait à distinguer un fichier dans une branche et un fichier local non enregistré et j'ai pensé 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 un moyen de ne pas avoir à taper le nom de fichier deux fois)

36
Nate

Pour voir les modifications non échelonnées (non ajoutées) aux fichiers existants

git diff

Notez que cela ne suit pas les nouveaux fichiers. Pour voir les modifications mises en scène et non validées

git diff --cached

20
pepestar

Si vous souhaitez comparer les fichiers visuellement, vous pouvez utiliser:

git difftool

Votre application diff démarrera automatiquement pour chaque fichier modifié.

PS: Si vous n'avez pas défini d'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
7
Caner