Вопрос: Просмотр истории изменений файла с помощью Git versioning


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

Я дошел до:

git log -- [filename]

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

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


2457


источник


Ответы:


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

gitk [filename]

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

gitk --follow [filename]

1907



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

git log -p filename

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

Видеть

git help log

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

git show HEAD 

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

gitk

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


1804



git log --follow -p -- file

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

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


1155



If you prefer to stay text-based, you may want to use tig.

Quick Install:

  • apt-get: # apt-get install tig
  • Homebrew (OS X): $ brew install tig

Use it to view history on a single file: tig [filename]
Or browse detailed repo history: tig

Similar to gitk but text based. Supports colors in terminal!


144



git whatchanged -p filename is also equivalent to git log -p filename in this case.

You can also see when a specific line of code inside a file was changed with git blame filename. This will print out a short commit id, the author, timestamp, and complete line of code for every line in the file. This is very useful after you've found a bug and you want to know when it was introduced (or who's fault it was).


99



SourceTree users

If you use SourceTree to visualize your repository (it's free and quite good) you can right click a file and select Log Selected

enter image description here

The display (below) is much friendlier than gitk and most the other options listed. Unfortunately (at this time) there is no easy way to launch this view from the command line — SourceTree's CLI currently just opens repos.

enter image description here


90



To show what revision and author last modified each line of a file:

git blame filename

or if you want to use the powerful blame GUI:

git gui blame filename

56



Summary of other answers after reading through them and playing a bit:

The usual command line command would be

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

But you can also use either gitk (gui) or tig (text-ui) to give much more human-readable ways of looking at it.

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

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

Under debian/ubuntu, the install command for these lovely tools is as expected :

sudo apt-get install gitk tig

And I'm currently using:

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

so that I can just type gdf dir to get a focussed history of everything in subdirectory dir.


39



Add this alias to your .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

And use the command like this:

> git lg
> git lg -- filename

The output will look almost exactly the same as the gitk output. Enjoy.


22



I wrote git-playback for this exact purpose

pip install git-playback
git playback [filename]

This has the benefit of both displaying the results in the command line (like git log -p) while also letting you step through each commit using the arrow keys (like gitk).


13



Or:

gitx -- <path/to/filename>

if you're using gitx


12



Lately I discovered tig and found it very useful. There are some cases I'd wish it does A or B but most of the time it's rather neat.

For your case, tig <filename> might be what you're looking for.

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


11