git diff файл против его последнего изменения
можно ли заставить git создавать разницу между конкретным файлом, как он существует сейчас, и как он существовал до последнего коммита, который его изменил?
то есть, если мы знаем:
$ git log --oneline myfile
123abc Fix some stuff
456def Frobble the foos
789dba Initial commit
затем git diff 456def myfile
показывает последнее изменение в myfile. Можно сделать то же самое без знания, произведенного git log
; что изменилось в 123abc?
3 ответа:
это действительно существует, но это на самом деле функция
git log
:git log -p [--follow] [-1] <path>
отметим, что
-p
также можно использовать для отображения встроенного различия от одного фиксации:git log -p -1 <commit>
опции:
-p
(кроме-u
или--patch
) скрыт deeeeeeeep вgit-log
man page, и на самом деле является опцией отображения дляgit-diff
. При использованииlog
, он показывает патч, который будет сгенерирован для каждого коммита вместе с информация о фиксации-и скрывает коммиты, которые не касаются указанного<path>
. (Это поведение описано в параграфе на--full-diff
, что приводит к отображению полного различия каждого коммита.)-1
показывает просто последние изменения указанный файл (-n 1
можно использовать вместо-1
); в противном случае все показаны ненулевые различия этого файла.- это чтобы увидеть изменения, произошедшие до переименования.
насколько я могу судить, это единственный способ, чтобы сразу видеть последние изменения, внесенные в файл без использования
git log
(или аналогично) для подсчета количества промежуточных ревизий или определения хэша фиксации.чтобы увидеть изменения более старых версий, просто прокрутите журнал или укажите фиксацию или тег, с которого нужно запустить журнал. (Конечно, указание фиксации или тега возвращает вас к оригинальная проблема выяснения того, что такое правильная фиксация или тег.)
кредит где кредит причитается:
один из способов использования git diff:
git diff <commit> <path>
и общий способ ссылаться на один коммит последнего коммита - это относительный путь к фактической голове. Вы можете ссылаться на предыдущие коммиты как HEAD^ (в вашем примере это будет 123abc) или HEAD^^ (456def в вашем примере) и т. д...
Итак, ответ на ваш вопрос:
git diff HEAD^^ myfile
Если вы хорошо используете графический инструмент, это работает очень хорошо:
gitk <file>
gitk теперь показывает все коммиты, где файл был обновлен. Пометка фиксации покажет вам разницу с предыдущей фиксацией в списке. Это также работает для каталогов, но затем вы также можете выбрать файл для diff для выбранной фиксации. Супер полезно!