【发布时间】:2011-07-10 04:58:38
【问题描述】:
我过去是 CVS 用户,虽然我认为 Git 是一个很好的版本控制系统,但我缺少 CVS 中的一个功能。具体来说,我想查看文件的版本历史记录,例如文件上的标签。我如何在 Git 中做到这一点?
【问题讨论】:
标签: git file tags version history
我过去是 CVS 用户,虽然我认为 Git 是一个很好的版本控制系统,但我缺少 CVS 中的一个功能。具体来说,我想查看文件的版本历史记录,例如文件上的标签。我如何在 Git 中做到这一点?
【问题讨论】:
标签: git file tags version history
我使用的是 git 版本 2.23.0,如果您不使用其他选项或修订范围,则不需要使用“--”来显示文件的历史记录。只需使用:
git log filename
【讨论】:
Rafe Kettler's answer 为您提供所需的基础知识,但值得进一步扩展。首先,如果您的文件与分支同名,则应在文件名前添加--:
git log -p -- filename
-p 参数表示还显示该提交引入的对该文件的更改。您提到您希望查看适用于该版本的任何标签 - 为此您应该添加 --decorate 选项。
最后,如果该文件可能在其历史记录中的某个时间点被重命名,或者从存储库中的另一个位置复制到某个位置,您应该考虑添加--follow 选项。
您可以在 documentation 中找到有关 git log 的更多信息,或在其他 Stack Overflow 问题中查看特定文件历史记录的其他方法:
... 它还建议可以指定特定路径的图形历史浏览器(例如 gitk)。
【讨论】:
在 git 文件中没有自己的历史记录。该项目作为一个整体是有历史的。因此,您唯一可以要求的是与文件相关的历史部分,或者更确切地说(因为没有文件身份的特殊概念)与路径相关。所有显示命令的历史记录都接受路径限制器。喜欢:
$ git log -- file
$ gitk HEAD -- file
-- 将修订与路径分开。在大多数情况下,您可以省略它,但如果名称也是有效的修订名称或当前版本中不存在该文件,则可能需要它。
您也可以指定目录名称,在这种情况下,会列出该子树中所有文件的历史记录。
由于受到路径的限制,如果文件被重命名,它将不会跟随。毕竟,git 不存储任何关于重命名的显式信息。但是它可以猜测重命名,您可以要求 log 尝试使用 --follow 跟随重命名,例如:
$ git log --follow -- file
这仅适用于单个文件,不适用于目录。
另一个选项是查找包含特定文本的更改,如果您正在查找某些代码的来源,这通常是更容易的选择。使用-S 选项记录如下:
$ git log -Stext
【讨论】:
试穿一下尺寸:
git log -p filename
在终端上阅读有点困难,因此您可能需要将其重定向到文件并在那里查看。
【讨论】:
git config --global color.ui auto
git diff 1.6.0..1.6.5 -- Makefile.am