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 173

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 (или аналогично) для подсчета количества промежуточных ревизий или определения хэша фиксации.

чтобы увидеть изменения более старых версий, просто прокрутите журнал или укажите фиксацию или тег, с которого нужно запустить журнал. (Конечно, указание фиксации или тега возвращает вас к оригинальная проблема выяснения того, что такое правильная фиксация или тег.)

кредит где кредит причитается:

  • я обнаружил log -p спасибо ответ.
  • кредит Францископ и ответ за то, что показал мне .
  • спасибо Крисбетти за упоминание -n 1 вариант и ататко для упоминания -1 вариант.
  • кредит sweaver2112 для получения мне на самом деле читать документацию и выяснить, что -p "означает" семантически.

один из способов использования git diff:

git diff <commit> <path>

и общий способ ссылаться на один коммит последнего коммита - это относительный путь к фактической голове. Вы можете ссылаться на предыдущие коммиты как HEAD^ (в вашем примере это будет 123abc) или HEAD^^ (456def в вашем примере) и т. д...

Итак, ответ на ваш вопрос:

git diff HEAD^^ myfile

Если вы хорошо используете графический инструмент, это работает очень хорошо:

gitk <file>

gitk теперь показывает все коммиты, где файл был обновлен. Пометка фиксации покажет вам разницу с предыдущей фиксацией в списке. Это также работает для каталогов, но затем вы также можете выбрать файл для diff для выбранной фиксации. Супер полезно!