当前位置:首页-文章-Git配置管理-正文

九、查看Git版本库的提交历史

在提交了若干更新,又或者克隆了某个项目之后,你也许想看下版本库提交历史。 完成这个任务最简单而又有效的工具是 git log 命令。

在版本库中执行git log命令:

$ git log
commit 2c97086779fc3d4de014689f296d77f8ea4a865f (HEAD -> master)
Author: admin <admin@com>
Date:   Sun Aug 29 13:57:40 2021 +0800

    修改README.txt文件

commit a235818c40c14a444a0299c1af05e9f774287dce
Author: admin <admin@com>
Date:   Sun Aug 29 10:31:32 2021 +0800

    添加readme文件

需要注意的是,你看到的一大串类似2c9708677…的是commit id(版本号),和SVN不一样,Git的commit id不是1,2,3……递增的数字,而是一个SHA1计算出来的一个非常大的数字,用十六进制表示,而且你看到的commit id和我的肯定不一样,以你自己的为准。为什么commit id需要用这么一大串数字表示呢?因为Git是分布式的版本控制系统,会有很多人在同一个版本库里工作,如果大家都用1,2,3……作为版本号,那肯定就冲突了。

对于git log命令,不传入任何参数的默认情况下,git log 会按时间先后顺序列出所有的提交,最近的更新排在最上面。 正如你所看到的,这个命令会列出每个提交的 commit id、作者的名字和电子邮件地址、提交时间以及提交说明。

git log有一个非常有用的参数是--pretty。这个选项可以使用不同于默认格式的方式展示提交历史。 这个选项有一些内建的子选项供你使用。 比如 oneline 会将每个提交放在一行显示,在浏览大量的提交时非常有用。

$ git log --pretty=oneline
93f5bdb0f438321284a3d192ddbb094989ea280b (HEAD -> Devlopment) 添加设计文档
2c97086779fc3d4de014689f296d77f8ea4a865f (master) 修改README.txt文件
a235818c40c14a444a0299c1af05e9f774287dce 添加readme文件

最有意思的是 format ,可以定制记录的显示格式。 这样的输出对后期提取分析格外有用——因为你知道输出的格式不会随着 Git 的更新而发生改变:

$ git log --pretty=format:"%h - %an, %ar : %s"
93f5bdb - admin, 3 minutes ago : 添加设计文档
2c97086 - admin, 3 hours ago : 修改README.txt文件
a235818 - admin, 6 hours ago : 添加readme文件

下表列出了 format 接受的常用格式占位符的写法及其代表的意义。

选项说明
%H提交的完整哈希值
%h提交的简写哈希值
%T树的完整哈希值
%t树的简写哈希值
%P父提交的完整哈希值
%p父提交的简写哈希值
%an作者名字
%ae作者的电子邮件地址
%ad作者修订日期(可以用 --date=选项 来定制格式)
%ar作者修订日期,按多久以前的方式显示
%cn提交者的名字
%ce提交者的电子邮件地址
%cd提交日期
%cr提交日期(距今多长时间)
%s提交说明

一定奇怪 作者提交者 之间究竟有何差别, 其实作者指的是实际作出修改的人,提交者指的是最后将此工作成果提交到仓库的人。 所以,当你为某个项目发布补丁,然后某个核心成员将你的补丁并入项目时,你就是作者,而那个核心成员就是提交者。

当 oneline 或 format 与另一个 log 选项 --graph 结合使用时尤其有用。 这个选项会以图谱的形式来形象地展示你的分支、合并历史:

$ git log --all --oneline --graph

该命令的执行结果如下图所示:

九、查看Git版本库的提交历史 - 第1张

下表列出了git log 的常用的选项,以及它们是如何影响 log 命令的输出的:

选项说明
-p按补丁格式显示每个提交引入的差异。
--stat显示每次提交的文件修改统计信息。
--shortstat只显示 --stat 中最后的行数修改添加移除统计。
--name-only仅在提交信息后显示已修改的文件清单。
--name-status显示新增、修改、删除的文件清单。
--abbrev-commit仅显示 SHA-1 校验和所有 40 个字符中的前几个字符。
--relative-date使用较短的相对时间而不是完整格式显示日期(比如“2 weeks ago”)。
--graph在日志旁以 ASCII 图形显示分支与合并历史。
--pretty使用其他格式显示历史提交信息。可用的选项包括 oneline、short、full、fuller 和 format(用来定义自己的格式)。
--oneline--pretty=oneline --abbrev-commit 合用的简写。

除了定制输出格式的选项之外,git log 还有许多非常实用的限制输出长度的选项,也就是只输出一部分的提交。 比如只输出最近的两次提交信息, 实际上,你可以使用类似 -<n> 的选项,其中的 n 可以是任何整数,表示仅显示最近的 n 条提交。

$ git log --oneline -2
aeb65f4 (HEAD -> master) 添加需求文档
2c97086 修改README.txt文件

git log的命令非常强大,也非常有用,关于git log的其他高级使用方式在需要的时候参考Git官方手册或参考其他资料。

所属专题:

本文原创,作者:Modeler。
如需转载,请注明出处:https://modelbaba.com/version-control/777.html

相关文章

换一批