Просмотр истории изменений файла с помощью Git-версий - PullRequest
2785 голосов
/ 10 ноября 2008

Как посмотреть историю изменений отдельного файла в Git, подробности о том, что изменилось?

Я дошел до:

git log -- [filename]

, которая показывает мне историю изменений файла, но как мне получить содержимое каждого файла с изменениями?

Я пытаюсь перейти с MS SourceSafe, и раньше это было просто right-clickshow history.

Ответы [ 22 ]

2173 голосов
/ 24 августа 2009

Для этого я бы использовал:

gitk [filename]

или следовать имени файла после переименования

gitk --follow [filename]
2026 голосов
/ 10 ноября 2008

Вы можете использовать

git log -p filename

, чтобы позволить git генерировать патчи для каждой записи в журнале.

См

git help log

для большего количества опций - на самом деле он может сделать много приятных вещей :) Чтобы получить только diff для определенного коммита, вы можете

git show HEAD 

или любая другая ревизия по идентификатору. Или используйте

gitk

для визуального просмотра изменений.

1358 голосов
/ 31 марта 2011

git log --follow -p -- path-to-file

Это покажет всю историю файла (включая историю за переименованием и различия для каждого изменения).

Другими словами, если файл с именем bar был когда-то назван foo, то git log -p bar (без опции --follow) будет показывать историю файла только до того места, где он был переименован - не будет отображать историю файла, когда он был известен как foo. Использование git log --follow -p bar покажет всю историю файла, включая любые изменения в файле, когда он был известен как foo. Опция -p обеспечивает включение различий для каждого изменения.

158 голосов
/ 07 июня 2012

Если вы предпочитаете оставаться текстовым, вы можете использовать tig .

Быстрая установка:

  • apt-get : # apt-get install tig
  • Домашний напиток (OS X) : $ brew install tig

Используйте его для просмотра истории в одном файле: tig [filename]
Или просмотрите подробную историю репо: tig

Аналогично gitk, но основано на тексте. Поддерживает цвета в терминале!

109 голосов
/ 11 ноября 2008

git whatchanged -p filename также эквивалентно git log -p filename в этом случае.

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

96 голосов
/ 30 июля 2013

пользователей SourceTree

Если вы используете SourceTree для визуализации своего хранилища (это бесплатно и довольно неплохо), вы можете щелкнуть правой кнопкой мыши файл и выбрать Журнал выбранных

enter image description here

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

enter image description here

61 голосов
/ 11 августа 2010

Чтобы показать, какая ревизия и автор последней изменили каждую строку файла:

git blame filename

или если вы хотите использовать мощный графический интерфейс по обвинению:

git gui blame filename
45 голосов
/ 05 декабря 2012

Сводка других ответов после прочтения и небольшой игры:

Обычная команда командной строки будет

git log --follow --all -p dir/file.c

Но вы также можете использовать gitk (gui) или tig (text-ui), чтобы сделать его более понятным для человека.

gitk --follow --all -p dir/file.c

tig --follow --all -p dir/file.c

В Debian / Ubuntu команда установки для этих замечательных инструментов выглядит так:

sudo apt-get install gitk tig

И я сейчас использую:

alias gdf='gitk --follow --all -p'

чтобы я мог просто набрать gdf dir, чтобы получить целевую историю всего в подкаталоге dir.

23 голосов
/ 27 июня 2013

Добавьте этот псевдоним в ваш .gitconfig:

[alias]
    lg = log --all --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset'\n--abbrev-commit --date=relative

И используйте такую ​​команду:

> git lg
> git lg -- filename

Вывод будет выглядеть почти так же, как вывод gitk. Наслаждайтесь.

20 голосов
/ 10 ноября 2015

В последнее время я обнаружил tig и нашел его очень полезным. В некоторых случаях мне бы хотелось, чтобы он выполнял А или В, но в большинстве случаев он довольно аккуратный.

В вашем случае tig <filename> может быть тем, что вы ищете.

http://jonas.nitro.dk/tig/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...