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à.
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
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.
Pour comparer un référentiel local avec un référentiel distant, utilisez simplement la syntaxe ci-dessous:
git diff @ {en amont}
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.