如何查看单个文件的历史记录以及更改内容的完整详细信息?

git-log--[filename]显示文件的提交历史,但如何查看更改的文件内容?


当前回答

在Sourcetree UI中,您可以通过选择右键单击上下文菜单中的“Log Selected”选项来查找文件的历史记录:

它将显示所有提交的历史。

其他回答

使用优秀的Git扩展,您可以转到历史中文件仍然存在的位置(如果文件已被删除,否则只需转到HEAD),切换到文件树选项卡,右键单击文件并选择文件历史。

默认情况下,它通过重命名跟随文件,Blame选项卡允许查看给定版本的名称。

它有一些小缺点,比如显示致命错误:单击删除修订版时,“视图”选项卡中没有有效的对象名称,但我可以接受。:-)

如何在meld中以图形方式手动查看文件的更改历史

如果您只想查看哪个提交更改了文件,那么可以对它们执行gitdifftool,以图形方式查看meld的更改(如我在这里所解释的),请改为执行以下操作:

git log --follow --oneline -- path/to/file.c

样本运行和输出:

eRCaGuy_hello_world$ git log --follow --oneline -- c/alsa_aplay__play_tone_sound_WIP.c
04b67fb (HEAD -> master) Update c/alsa_aplay__play_tone_sound_WIP.c
301122a wip: alsa_aplay__play_tone_sound.c: finish initial version of program
d4e8092 wip: add c/alsa_aplay__play_tone_sound.c

现在我可以像这样以图形方式查看meld中的最后更改(从上面的输出中提取提交散列)。

请注意,我有意省略了文件名,以便它可以在文件重命名后自动为我正确跟踪文件,我知道这些提交可能只编辑了这个文件:

# just the last change
git difftool 04b67fb~..04b67fb

# and the one before that
git difftool 301122a~..301122a

# ...and before that
git difftool d4e8092~..d4e8092

如果需要指定文件名,只需使用:

git difftool 04b67fb~..04b67fb -- path/to/file.c

如果您将Eclipse与Git插件一起使用,那么它具有与历史的极好的比较视图。右键单击文件并选择“比较”→ “历史”。

在本例中,gitwhatchanged-p文件名也等效于gitlog-p文件名。

您还可以看到文件中的特定代码行何时更改为git责备文件名。这将为文件中的每一行打印一个简短的提交id、作者、时间戳和完整的代码行。当你发现了一个bug并且你想知道它是什么时候引入的(或者是谁的错),这是非常有用的。

您也可以尝试这个方法,它列出了更改文件特定部分的提交(在Git1.8.4中实现)。

返回的结果将是修改此特定部分的提交列表。命令:

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

其中upperLimit是文件的起始行号,lowerLimit是结束行号。

更多详情请访问http://techpurohit.in/list-some-useful-git-commands.