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

Posted

技术标签:

【中文标题】如何在 Git 中查看文件历史记录?【英文标题】:How can I view file history in Git? 【发布时间】:2010-12-19 15:39:06 【问题描述】:

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

如何使用 Git 做到这一点?

我只是在寻找特定文件的历史记录,然后能够比较不同的版本。

【问题讨论】:

【参考方案1】:

您似乎想要git diff 和/或git log。另请查看gitk:

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

【讨论】:

这是对 gitk 的另一个认可,它提供了一种浏览 git repo 中单个文件的所有快照的好方法。 默认情况下 gitk 显示 diff 加上 10 行上下文,但是如果你想查看整个文件的快照怎么办?只需将“上下文行”设置为一个较大的值(例如 100000)。然后,您可以在提交之间来回切换,并在不同的时间点查看整个文件。 (您也可以在文件中搜索。) gitk 在 Windows 上工作吗?如果可以,需要什么环境?【参考方案2】:

您可以使用git-diff 或git-log。

【讨论】:

【参考方案3】:

使用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 loggit 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

【讨论】:

感谢 -p 提示,这对于查找哪些修订涉及一些代码非常有用。【参考方案4】:

您也可以使用tig 来构建一个不错的、基于ncurses 的 Git 存储库浏览器。查看文件的历史记录:

tig path/to/file

【讨论】:

【参考方案5】:

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

【讨论】:

@RobertVuković 我知道这是一个老问题......但请参阅下面的答案!【参考方案6】:

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

【讨论】:

除了 TortoiseSvn shell 扩展包含一个显示单个文件历史的命令,而 TortoiseGit 没有。【参考方案7】:

我喜欢使用 gitk name_of_file

这显示了每次提交时文件发生的更改的漂亮列表,而不是显示所有文件的更改。更容易追踪发生的事情。

【讨论】:

【参考方案8】:

TortoiseGit 还提供了command line tool 来查看文件的历史记录。使用PowerShell:

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

【讨论】:

【参考方案9】:

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

【讨论】:

【参考方案10】:

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

【讨论】:

我的回答中没有链接@ineersa 这应该是最佳答案。我不喜欢使用蹩脚的 gui 工具 你能详细说明你的答案吗?例如,为什么需要选项 --all?它应该做什么? (但没有“编辑:”、“更新:”或类似的 - 答案应该看起来好像是今天写的。) @PeterMortensen 在此处查看文档:git-scm.com/docs/git-log#Documentation/git-log.txt---all

以上是关于如何在 Git 中查看文件历史记录?的主要内容,如果未能解决你的问题,请参考以下文章

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

Git - 如何查看方法/函数的更改历史记录?

SVN查看修改过的文件

idea中的查看git历史记录,不显示文件详细信息

Git怎么查看某次提交某个文件的修改

如何用pycharm查看文件修改记录和对比分支差异