如何查看单个文件的历史记录以及更改内容的完整详细信息?
git-log--[filename]显示文件的提交历史,但如何查看更改的文件内容?
如何查看单个文件的历史记录以及更改内容的完整详细信息?
git-log--[filename]显示文件的提交历史,但如何查看更改的文件内容?
当前回答
这使得Git可以为每个日志条目生成补丁:
git log -p -- filename
查看git帮助日志了解更多选项-它实际上可以做很多好事。:)
要获取特定提交的差异,请使用
git show HEAD
或通过标识符指定任何其他修订。
要直观浏览更改,请执行以下操作:
gitk
其他回答
Sourcetree用户
如果您使用Sourcetree可视化存储库(它是免费的,非常好),您可以右键单击文件并选择Log Selected
显示(下图)比gitk和列出的大多数其他选项友好得多。不幸的是(此时)没有从命令行启动此视图的简单方法-Sourcetree的CLI当前只打开存储库。
git log --follow -p -- path-to-file
这将显示文件的整个历史记录(包括重命名后的历史记录以及每次更改的差异)。
换句话说,如果名为bar的文件曾经被命名为foo,那么git-log-p bar(不带--follow选项)将只显示文件重命名之前的历史记录——当它被称为foo时,它不会显示文件的历史记录。使用git-log--follow-p bar将显示文件的整个历史记录,包括文件名为foo时对其所做的任何更改。-p选项确保每个更改都包含差异。
这使得Git可以为每个日志条目生成补丁:
git log -p -- filename
查看git帮助日志了解更多选项-它实际上可以做很多好事。:)
要获取特定提交的差异,请使用
git show HEAD
或通过标识符指定任何其他修订。
要直观浏览更改,请执行以下操作:
gitk
tig是一种基于终端的查看器,具有类似于基于GUI的gitk的颜色支持。
快速安装:
APT:APT-get-install tigHomebrew(OS X):$brew安装tig
使用它可以查看单个文件的历史记录:tig[filename]
或通过:tig浏览详细的存储库历史记录
如何在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