查看提交历史
提交历史是项目的“时光机”。虽然我们已经用过 git log 来查看提交记录,但它能做的事情远不止简单列出 ID 和消息。
本章节将带你解锁 git log 的花式用法,从查看具体代码变更到图形化展示分支历史,让你像侦探一样精准追溯代码的演变。
1. 基础回顾
Section titled “1. 基础回顾”最基本的命令我们已经很熟悉了:
git log默认情况下,它会按时间倒序(最新的在最上面)列出提交。按下 Space 翻页,按下 q 退出。
2. 查看具体差异
Section titled “2. 查看具体差异”如果你不仅想知道“谁在什么时候提交了什么”,还想知道“具体改了哪些代码”,可以使用 -p (patch) 选项。
显示补丁内容
Section titled “显示补丁内容”git log -p这将展示每次提交的具体差异(diff),非常适合进行代码审查。
限制输出数量
Section titled “限制输出数量”通常我们只关心最近的几次提交。使用 -[n] 选项可以限制显示的提交数量。
例如,查看最近的 2次 提交及其代码差异:
git log -p -23. 查看统计信息
Section titled “3. 查看统计信息”如果你不想看详细的代码每一行变化,只想通过宏观视角了解每次提交的“体量”(比如修改了多少个文件,增删了多少行),可以使用 --stat 选项。
git log --stat输出示例:
commit ca82a6dff817ec66f44342007202690a93763949Author: GitTour User <user@example.com>Date: Mon May 13 20:52:19 2024 +0800
docs: add chapter on basic commands
src/docs/basics.md | 120 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 120 insertions(+)底部的统计信息(1 file changed, 120 insertions(+))能让你快速判断这是一个小的修补还是大的功能更新。
4. 定制输出格式
Section titled “4. 定制输出格式”默认的日志格式包含作者、日期等详细信息,有时显得太冗长。我们可以使用 --pretty 选项来定制。
git log --pretty=oneline这会将每个提交压缩成一行,只保留完整的哈希值和提交信息。
或者使用更简短的 --oneline(哈希值默认显示 7 位,可通过 core.abbrev 配置调整):
git log --oneline必杀技:图形化展示历史
Section titled “必杀技:图形化展示历史”当你的项目开始有分支和合并时,普通的日志列表会变得难以理解。下面这条命令是 Git 高手的标配,它能以 ASCII 字符图的形式展示分支历史:
git log --oneline --graph --all--oneline: 单行紧凑显示。--graph: 在左侧绘制 ASCII 字符图,显示分支的衍合情况。--all: 显示所有分支的历史,而不仅仅是当前分支。
5. 筛选历史
Section titled “5. 筛选历史”当仓库中有成千上万次提交时,你需要学会“大海捞针”。
想看看过去两周的工作?或者指定日期之后的提交?
# 查看最近2周的提交git log --since=2.weeks
# 查看指定日期之后的提交git log --since="2024-01-01"
# 查看指定日期之前的提交git log --until="2024-03-01"只想看某位同事(或你自己)的提交:
git log --author="Alice"按提交信息筛选 (--grep)
Section titled “按提交信息筛选 (--grep)”记不清具体的提交 ID,但记得提交信息里写了 “bug fix”?
git log --grep="bug fix"按代码内容筛选 (-S)
Section titled “按代码内容筛选 (-S)”这是 Git 的大杀器,通常被称为 “Pickaxe”(镐)。
如果你想知道哪一次提交引入或删除了某个特定的字符串(比如某个函数名或变量名),可以使用 -S。
# 查找所有添加或删除了 "loginValidator" 字符串的提交git log -S "loginValidator"这对于追踪“这个函数是什么时候被删掉的?”或者“这个配置项是什么时候加进来的?”这类问题极其有效,即使该提交的说明信息里根本没提这件事。
git log 是一个极其强大的查询工具。
| 场景 | 命令 |
|---|---|
| 查代码细节 | git log -p -2 |
| 查变更概况 | git log --stat |
| 看分支走向 | git log --oneline --graph --all |
| 搜提交信息 | git log --grep="关键字" |
| 搜代码变动 | git log -S "代码片段" |
熟练掌握这些过滤器,你就不再是在看枯燥的日志,而是在与项目的历史对话。