Git: Как изменить измененные файлы по сравнению с предыдущими версиями после pull?

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

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

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

Ответ 1

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

git diff [email protected]{1}

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

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

git diff [email protected]{1} filename

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

Ответ 2

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

git diff HEAD^

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

git diff HEAD^ -- /foo/bar/baz.txt

Ответ 3

Если вы выполняете прямую git pull, то вы либо будете "переадресованы вперед", либо объедините неизвестное количество коммитов из удаленного репозитория. Это происходит как одно действие, поэтому последнее коммит, который вы были непосредственно перед вытаскиванием, будет последней записью в рефлоге и может быть доступен как [email protected]{1}. Это означает, что вы можете:

git diff [email protected]{1}

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

git fetch

git log HEAD..origin/master

 # looks good, lets merge

git merge origin/master