如何在 Git 中查看单个文件的更改历史记录以及更改后的完整详细信息?
我到目前为止:
git log -- [filename]
它向我显示了文件的提交历史记录,但是如何获得每个文件更改的内容?
我正在尝试从 MS SourceSafe 进行过渡,该过渡曾经是简单的right-click
→ show history
。
为此,我将使用:
gitk [filename]
或跟随文件名重命名
gitk --follow [filename]
您可以使用
git log -p filename
让 git 为每个日志条目生成补丁。
看到
git help log
更多选项 - 它实际上可以做很多事情:) 要获得特定提交的差异,您可以
git show HEAD
或任何其他按标识符的修订。或使用
gitk
直观地浏览更改。
git log --follow -p -- path-to-file
这将显示文件的整个历史记录(包括重命名后的历史记录以及每个更改的差异)。
换句话说,如果名为bar
的文件曾经被命名为foo
,那么git log -p bar
(不带--follow
选项)将仅显示文件的历史记录,直到文件被重命名为止 - 不会显示文件的历史记录,即foo
。使用git log --follow -p bar
将显示文件的整个历史记录,包括文件被称为foo
时的任何更改。 -p
选项可确保每个更改都包含差异。
如果您希望保留基于文本的内容,则可能要使用tig 。
快速安装:
# apt-get install tig
$ brew install tig
使用它来查看单个文件的历史记录: tig [filename]
或浏览详细的回购历史记录: tig
与gitk
类似,但基于文本。支持终端中的颜色!
在这种情况下, git whatchanged -p filename
也等效于git log -p filename
。
您还可以查看何时使用git blame filename
更改了文件中的特定代码行。这将为文件中的每一行打印出简短的提交 ID,作者,时间戳和完整的代码行。当您发现一个错误并想知道它何时被引入(或它是谁的错)之后,这非常有用。
如果您使用 SourceTree 可视化您的存储库(它是免费的,还算不错),您可以右键单击一个文件并选择Log Selected
下方的显示比 gitk 和列出的大多数其他选项友好得多。不幸的是(目前),没有一种简单的方法可以从命令行启动此视图 - SourceTree 的 CLI 当前仅打开存储库。
要显示什么版本和作者最后修改了文件的每一行:
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 输出相同。请享用。
最近,我发现了tig
,发现它非常有用。在某些情况下,我希望它可以执行 A 或 B 操作,但大多数情况下它都比较整洁。
对于您的情况, tig <filename>
可能就是您想要的。