如何在Git中查看文件历史记录?

157

使用Subversion,我可以使用TortoiseSVN查看文件的历史记录/日志。

在Git中如何实现相同功能?

我只需要查看特定文件的历史记录,并比较不同版本。

10个回答

182

使用git log查看提交历史记录。每个提交都有一个关联的修订指定符,它是一个哈希键(例如14b8d0982044b0c49f7a855e396206ee65c0e787b410ad4619d296f9d37f0db3d0ff5b9066838b39)。要查看两个不同提交之间的差异,请使用git diff及两个提交的前几个字符的修订指定符,如下所示:

# diff between commits 14b8... and b410...
git diff 14b8..b410
# only include diff of specified files
git diff 14b8..b410 path/to/file/a path/to/file/b

如果你想了解每个提交之间发生的所有差异,请使用git log或带有补丁选项的git whatchanged

# include patch displays in the commit history
git log -p
git whatchanged -p
# only get history of those commits that touch specified paths
git log path/a path/b
git whatchanged path/c path/d

10
谢谢你提供这个-p提示,这对于查找涉及代码的修订非常有用。 - Christopher Pickslay

116

看起来你想要使用git diff和/或git log。另外还可以查看gitk

gitk path/to/file
git diff path/to/file
git log path/to/file

4
这里再次推荐 gitk,它提供了一种很好的方式来浏览 Git 库中单个文件的所有快照。 - Ray Brown
1
默认情况下,gitk显示差异加上10行上下文,但是如果您想要查看整个文件的快照怎么办?只需将“上下文行数”设置为一个较大的值(例如100000)。然后,您可以在提交之间来回切换,并在不同时间点查看整个文件。(您还可以在文件内搜索。) - antinome
Gitk在Windows上可以使用吗?如果可以,需要什么环境? - Peter Mortensen

51

我最喜欢的是git log -p <文件名>,它可以为您提供给定文件的所有提交历史记录以及每个提交的差异。


39

我喜欢使用 gitk 文件名

这将显示文件在每次提交时发生的变化的一个很好的列表,而不是显示所有文件的更改情况。这样可以更轻松地追踪发生的事件。


35

你也可以使用tig作为一个漂亮的、基于ncurses的Git存储库浏览器。要查看文件的历史记录:

tig path/to/file

应该是被接受的答案! - ZeroCool

11

许多 Git 历史记录浏览器,包括 git log (和 'git log --graph')、gitk(在 Git 中的 Tcl/Tk 中)、QGit(在 Qt 中)、tig(使用 ncurses 的文本模式接口到 Git)、Giggle(在 GTK+中)、TortoiseGit 和 git-cheetah 都支持路径限制(例如:gitk path/to/file)。


@RobertVuković 我知道这是一个老问题...但请看下面我的答案! - brianc

6

git log --all -- path/to/file 应该可以工作。


我的回答中没有链接 @ineersa - Edson Medina
3
这应该是最佳答案。我不喜欢使用糟糕的图形界面工具。 - Grobi
你能详细解释一下你的回答吗?例如,为什么需要选项“--all”?它应该做什么?(但是不要包括“编辑:”,“更新:”或类似内容 - 回答应该看起来像今天写的。) - Peter Mortensen
@PeterMortensen 在这里查看文档:https://git-scm.com/docs/git-log#Documentation/git-log.txt---all - Edson Medina
@EdsonMedina 在评论中放置文档链接并不是最好的做法,最好的方法是将链接放在回答中,并复制相关部分在这里。“RTFM”(即使没有F)听起来很傲慢。 - Honza Zidek

4
当然,如果你想要尽可能接近TortoiseSVN的东西,你可以使用TortoiseGit

1
除了TortoiseSvn shell扩展包含一个显示单个文件历史记录的命令外,TortoiseGit没有。 - Neutrino

3

TortoiseGit同样提供了一个命令行工具来查看文件的历史记录。使用PowerShell

C:\Program` Files\TortoiseGit\bin\TortoiseGitProc.exe /command:log /path:"c:\path\to\your\file.txt"

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接