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