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-logman 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 для выбранной фиксации. Супер полезно!