Git: различие между файлом в локальном репо и происхождении

Я хочу найти различия между файлом, который у меня есть в моем локальном репозитории, и тем, что находится в origin master.

Я знаю, что есть git diff, но я просто хочу выделить его в этом конкретном файле.

Для простоты предположим, что файл называется file1.txt и имеет локальный путь к файлу = [local_path] а в источнике он имеет filepath = [remote-path].

Какую команду git мне нужно набрать?

РЕДАКТИРОВАТЬ: Спасибо всем за ваш вклад, это было очень проницательным. Для тех, кто использует Eclipse (о чем я и должен был сказать ранее), я только что узнал, что вы можете просто щелкнуть правой кнопкой мыши → Сравнить с → Ветвь, Тег или Ссылка → выбрать подходящую версию, и все готово.

Ответ 1

Если [remote-path] и [local-path] совпадают, вы можете сделать

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

Примечание 1: Вторая команда выше будет сравниваться с локально сохраненной ветвью удаленного отслеживания. Команда fetch требуется, чтобы обновить ветвь удаленного отслеживания, чтобы синхронизироваться с содержимым удаленного сервера. Кроме того, вы можете просто сделать

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

Примечание 2: master можно заменить в приведенных выше примерах любым именем ветки

Ответ 2

Чтобы просмотреть различия между удаленным файлом и локальным файлом:

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

Чтобы просмотреть различия в другом направлении:

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

В принципе вы можете различать любые два файла в любом месте с помощью этих обозначений:

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

Как обычно, ref1 и ref2 могут быть именами ветвей, remotename/branchname, commit SHA и т.д.

Ответ 3

Чтобы сравнить локальный репозиторий с удаленным, просто используйте следующий синтаксис:

git diff @{upstream}

Ответ 4

Для этого я написал скрипт 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

В приведенном выше сценарии я извлек удаленную основную ветвь (не обязательно ее основную ветвь, ЛЮБУЮ ветвь) в FETCH_HEAD затем составил список только моего измененного файла и сравнил измененные файлы с git difftool.

difftool поддерживает много difftool, я настроил Meld Diff Viewer для хорошего сравнения GUI.
Из приведенного выше сценария я уже знаю, какие изменения были сделаны другими командами в том же файле, прежде чем я буду следовать этапам git untrack-->staged-->commit которые помогают мне избежать ненужного конфликта разрешений слияния с удаленной командой или создания новой локальной ветки и сравнить и объединить на основной ветке.