关于Git日志:使用Git版本控制查看文件的更改历史记录

View the change history of a file using Git versioning

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

我已经做到了:

1
git log -- [filename]

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

我正试图从MS SourceSafe过渡到以前简单的right-clickshow history


为此,我将使用:

1
gitk [filename]

或者在重命名之前跟踪文件名

1
gitk --follow [filename]


你可以使用

1
git log -p filename

让Git为每个日志条目生成补丁。

1
git help log

对于更多的选项-它实际上可以做很多好事情:)为了获得特定提交的差异,您可以

1
git show HEAD

或任何其他标识符修订。或使用

1
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、作者、时间戳和完整的代码行。当你发现了一个bug并且想知道它是什么时候引入的(或者是谁的错)之后,这是非常有用的。


sourcetree用户

如果您使用sourcetree来可视化您的存储库(它是免费的并且非常好),您可以右键单击一个文件并选择LogSelected。

enter image description here

显示器(以下)比Gitk和列出的大多数其他选项友好得多。不幸的是(此时)无法从命令行启动此视图-sourcetree的cli当前只打开repos。

enter image description here


要显示上次修改文件的每一行的修订和作者,请执行以下操作:

1
git blame filename

或者,如果您想使用强大的责备图形用户界面:

1
git gui blame filename

阅读并播放一点后,总结其他答案:

通常的命令行命令是

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

但您也可以使用Gitk(GUI)或Tig(文本用户界面)来提供更具人类可读性的查看方式。

1
2
3
gitk --follow --all -p dir/file.c

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

在debian/ubuntu下,这些可爱工具的安装命令如预期的那样:

1
sudo apt-get install gitk tig

我目前正在使用:

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

这样我就可以输入gdf dir来获得子目录dir中所有内容的集中历史。


将此别名添加到.gitconfig中:

1
2
3
[alias]
    lg = log --all --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset'
--abbrev-commit --date=relative

使用如下命令:

1
2
> git lg
> git lg -- filename

输出看起来几乎与Gitk输出完全相同。享受。


最近我发现了tig,发现它非常有用。有些情况下,我希望它是A或B,但大多数时候它相当整洁。

对于您的情况,您可能需要的是tig

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


为了这个目的我写了Git回放

1
2
pip install git-playback
git playback [filename]

这样既可以在命令行中显示结果(如git log -p),也可以使用箭头键(如gitk)逐步完成每个提交。


或:

gitx --

如果你用的是Gitx


如果要查看文件的整个历史记录,包括所有其他分支,请使用:

1
gitk --all <filename>

如果您正在使用存储库菜单下的GitGUI(在Windows上),则可以使用"可视化主机历史记录"。突出显示顶部窗格中的提交和右下角的文件,您将在左下角看到该提交的差异。


使用出色的Git扩展,您可以转到历史上文件仍然存在的位置(如果文件已被删除,否则直接转到head),切换到File tree选项卡,右键单击文件并选择File history

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

它有一些小问题,比如在单击删除修订时在View选项卡中显示fatal: Not a valid object name,但我可以接受。-)


SmartGit:

  • 在菜单中,启用以显示未更改的文件:查看/显示未更改的文件
  • 右键单击文件并选择"日志"或按"ctrl-l"

  • 您还可以尝试这样做,列出已更改文件特定部分的提交(在Git 1.8.4中实现)。

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

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

    其中upperlimit是文件的起始行号,lowerlimit是文件的结束行号。

    更多详细信息,请访问https://www.techpurohit.com/list-some-utility-git-commands


    我要寻找的答案不在这个线程中,而是查看我为提交而准备的文件中的更改。即

    1
    git diff --cached


    如果您使用TortoisGit,您应该能够右键单击该文件并执行TortoiseGit --> Show Log。在弹出的窗口中,确保:

    • 未选中"EDOCX1"〔1〕选项。

    • 选中"EDOCX1"〔2〕选项。


    git diff -U 给你一个统一的区别。

    它应该是红色和绿色的。如果不是,先运行:git config color.ui auto


    如果您将Eclipse与Git插件一起使用,那么它具有极好的历史对比视图。右键单击文件并选择"Compare with"=>"History"