Просмотр истории изменений файла с помощью управления версиями Git

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

Я дошел до:

git log -- [filename]

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

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

21 ответов


для этого я использую:

gitk [filename]

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

gitk --follow [filename]

можно использовать

git log -p filename

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

посмотреть

git help log

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

git show HEAD 

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

gitk

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


git log --follow -p -- file

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

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


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

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

  • apt-get: # apt-get install tig
  • домашнее пиво (OS X): $ brew install tig

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

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


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

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


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

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

enter image description here

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

enter image description here


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

git blame filename

или если вы хотите использовать мощный GUI вины:

git gui blame filename

резюме других ответов после прочтения их и играть немного:

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

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.


добавить этот псевдоним .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. Наслаждаться.


я писал git-воспроизведение именно с этой целью

pip install git-playback
git playback [filename]

это имеет преимущество как отображения результатов в командной строке (например,git log -p), а также позволяя вам проходить через каждую фиксацию с помощью клавиш со стрелками (например,gitk).


или:

gitx -- <path/to/filename>

Если вы используете gitx


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

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

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


Если вы хотите увидеть всю историю файла, в том числе on все остальные ветки использовать:

gitk --all <filename>

Если вы используете Git GUI (в Windows) в меню репозитория, вы можете использовать "визуализировать историю мастера". Выделите фиксацию в верхней панели и файл в правом нижнем углу, и вы увидите разницу для этой фиксации в левом нижнем углу.


отличное Расширения Git, вы переходите к точке в истории, где файл все еще существовал (если он был удален, в противном случае просто перейдите к голове), переключитесь на щелкните правой кнопкой мыши на файле и выберите File history.

по умолчанию он следует за файлом через переименования и Blame вкладка позволяет увидеть имя в данной редакции.

Он имеет некоторые незначительные проблемы, как показывает fatal: Not a valid object name на View вкладка при нажатии на исправление удаления, но я могу жить с этим. :-)


ответ, который я искал, не был в этом потоке, - это увидеть изменения в файлах, которые я поставил для фиксации. т. е.

git diff --cached

вы также можете попробовать это, в котором перечислены коммиты, которые изменили определенную часть файла (реализован в git 1.8.4).

возвращаемый результат будет списком коммитов, которые изменили эту конкретную часть. Команда звучит так:

git log --pretty=short -u -L <upperLimit>,<lowerLimit>:<path_to_filename>

где upperLimit-это start_line_number, а lowerLimit-это ending_line_number файла.


Если вы используете TortoiseGit, вы должны иметь возможность щелкнуть правой кнопкой мыши по файлу и сделать TortoiseGit --> Show Log. В появившемся окне убедитесь:

  • ' Не проверять.

  • '' это.


SmartGit:

  1. в меню включить отображение неизмененных файлов: просмотр / показать неизмененные файлы
  2. щелкните правой кнопкой мыши файл и выберите " Log "или нажмите" Ctrl-L"

git diff -U <filename> дать вам единый дифф.

Он должен быть окрашен в красный и зеленый. Если это не так, запустите: git config color.ui auto первый.


Если вы используете eclipse с плагином git, он имеет отличный вид сравнения с историей. Щелкните правой кнопкой мыши файл и выберите " сравнить с "=> "История"