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
которые помогают мне избежать ненужного конфликта разрешений слияния с удаленной командой или создания новой локальной ветки и сравнить и объединить на основной ветке.