使用 Git 版本查看文件的更改历史记录

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

我到目前为止:

git log -- [filename]

它向我显示了文件的提交历史记录,但是如何获得每个文件更改的内容?

我正在尝试从 MS SourceSafe 进行过渡,该过渡曾经是简单的right-clickshow 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# apt-get install tig
  • 自制软件(OS X)$ brew install tig

使用它来查看单个文件的历史记录: tig [filename]
或浏览详细的回购历史记录: tig

gitk类似,但基于文本。支持终端中的颜色!

在这种情况下, git whatchanged -p filename也等效于git log -p filename

您还可以查看何时使用git blame filename更改了文件中的特定代码行。这将为文件中的每一行打印出简短的提交 ID,作者,时间戳和完整的代码行。当您发现一个错误并想知道它何时被引入(或它是谁的错)之后,这非常有用。

SourceTree 用户

如果您使用 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>可能就是您想要的。

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