git: Как отличить измененные файлы от предыдущих версий после получения? - PullRequest
108 голосов
/ 11 марта 2010

Когда я запускаю "git pull", я часто хочу знать, что изменилось между последней версией файла и новой. Скажем, я хочу знать, что кто-то еще передал в конкретный файл.

Как это сделать?

Я предполагаю, что это "git diff" с некоторыми параметрами для коммита x по сравнению с коммитом y, но я не могу получить синтаксис. Я также нахожу, что «git log» немного сбивает с толку, и я не уверен, где взять идентификатор фиксации моей последней версии файла по сравнению с новой.

Ответы [ 3 ]

139 голосов
/ 11 марта 2010

Существует множество замечательных способов указания коммитов - см. , указывающий ревизии , раздел man git-rev-parse для получения более подробной информации. В этом случае вы, вероятно, хотите:

git diff HEAD@{1}

@{1} означает «предыдущую позицию ссылки, которую я указал», так что это оценивает то, что вы уже проверяли - непосредственно перед извлечением. Вы можете прикрепить HEAD в конце, если у вас также есть некоторые изменения в вашем рабочем дереве, и вы не хотите видеть различия для них.

Я не уверен, что вы запрашиваете с «идентификатором коммита моей последней версии файла» - «идентификатор» коммита (хэш SHA1) - это шестнадцатеричный шестнадцатеричный символ в начале каждой записи в выводе git log. Это хеш для всего коммита, а не для данного файла. На самом деле вам больше не нужно больше - если вы хотите развести только один файл за раз, сделайте

git diff HEAD@{1} filename

Это общая вещь - если вы хотите узнать о состоянии файла в данном коммите, вы указываете коммит и файл, а не ID / хэш, специфичные для файла.

52 голосов
/ 23 апреля 2012

Мне нравится использовать:

git diff HEAD^

Или, если я хочу показать только определенный файл:

git diff HEAD^ -- /foo/bar/baz.txt
13 голосов
/ 11 марта 2010

Если вы выполните прямую git pull, то вы либо будете «быстро переадресованы», либо объедините неизвестное количество коммитов из удаленного репозитория. Однако это происходит как одно действие, поэтому последний коммит, в котором вы находились непосредственно перед извлечением, будет последней записью в журнале и может быть доступен как HEAD@{1}. Это означает, что вы можете сделать:

git diff HEAD@{1}

Тем не менее, я настоятельно рекомендую, чтобы, если вы часто этим занимались, вам следует просто выполнить git fetch и проверить извлеченную ветвь, прежде чем вручную объединять или перебазировать ее. Например. если вы на мастере и собирались вытащить в оригинале / мастере:

git fetch

git log HEAD..origin/master

 # looks good, lets merge

git merge origin/master
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...