web-dev-qa-db-fra.com

git: diff entre le fichier dans le référentiel local et l'origine

Je veux trouver les différences entre un fichier que j'ai dans mon référentiel local et ce qui se trouve dans le Origin master.

Je sais qu'il existe git diff, mais je souhaite simplement l'isoler dans ce fichier particulier.

Par souci de simplicité, supposons que le fichier s'appelle file1.txt et qu'il ait un chemin de fichier local = [local_path] et que le fichier Origin ait le chemin de fichier = [remote-path].

Quelle est la commande git que je dois taper?

EDIT: Merci à tous pour votre contribution, cela a été très perspicace. Pour ceux qui utilisent Eclipse (que je suis et que j'aurais dû préciser plus tôt), je viens de découvrir que vous pouvez cliquer avec le bouton droit de la souris -> Comparer avec -> Succursale, étiquette ou référence -> sélectionner la version appropriée, et voilà.

162
SeekingAlpha

Si [remote-path] et [local-path] sont identiques, vous pouvez faire

$ git fetch Origin master
$ git diff Origin/master -- [local-path]

Note 1: La deuxième commande ci-dessus comparera la branche de suivi distante stockée localement. La commande fetch est requise pour mettre à jour la branche de suivi distante afin qu'elle soit synchronisée avec le contenu du serveur distant. Alternativement, vous pouvez simplement faire

$ git diff master:<path-or-file-name>

Note 2:master peut être remplacé dans les exemples ci-dessus par n'importe quel nom de branche

218
Code-Apprentice

Pour afficher les différences entre le fichier distant et le fichier local:

git diff remotename/branchname:remote/path/file1.txt local/path/file1.txt

Pour afficher les différences dans l'autre sens:

git diff HEAD:local/path/file1.txt remotename/branchname:remote/path/file1.txt

Fondamentalement, vous pouvez comparer deux fichiers n'importe où en utilisant cette notation:

git diff ref1:path/to/file1 ref2:path/to/file2

Comme d'habitude, ref1 et ref2 pourraient être des noms de branche, nom de domaine/nom de branche, commit SHAs, etc.

102
janos

Pour comparer un référentiel local avec un référentiel distant, utilisez simplement la syntaxe ci-dessous:

git diff @ {en amont}

10
Ratna Halder

Pour cela j'ai écrit un script bash:

#set -x 
branchname=`git branch | grep -F '*' |  awk '{print $2}'`
echo $branchname
git fetch Origin ${branchname}
for file in `git status | awk '{if ($1 == "modified:") print $2;}'`
do
echo "PLEASE CHECK OUT GIT DIFF FOR "$file 
git difftool  FETCH_HEAD $file ;
done

Dans le script ci-dessus, j'ai récupéré la branche principale distante (pas nécessairement sa branche principale) vers FETCH_HEAD, puis je n'ai répertorié que mon fichier modifié et comparé les fichiers modifiés à git difftool.

Il y a beaucoup de difftool supportés par git, j'ai configuré Meld Diff Viewer pour une bonne comparaison d'interface graphique.
D'après le script ci-dessus, j'ai connaissance des modifications apportées par d'autres équipes dans le même fichier, avant de suivre les étapes de git untrack-->staged-->commit qui m'aident à éviter des conflits de fusion inutiles avec une équipe distante ou à créer une nouvelle branche locale. et comparer et fusionner sur la branche principale.

2
adg