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