Git 日志



命令 `git log` 默认情况下按反时间顺序显示提交日志。此命令非常有用,因为它有助于跟踪和理解项目的历史记录,了解谁做了更改以及何时更改。

用法

1. **查看提交历史** - 命令 `git log` 按反时间顺序显示提交日志,这意味着最新的提交首先列出。

每个提交条目包含

  • 提交的唯一标识符 **提交哈希**。

  • 提交的作者。

  • 提交的日期和时间。

  • 提交消息。

2. **过滤提交** - 可以使用不同的选项过滤提交历史记录,例如

  • `--author=` - 只显示由指定作者完成的提交。

  • `--since` 或 `--until` - 显示在特定日期之前或之后进行的提交。

3. **精简输出** - `git log` 的默认输出通常很长且详细,但有多种方法可以使其精简。

  • `--oneline` - 每个提交都在一行中显示,包含提交哈希和提交消息。

  • `--graph` - 显示提交历史的详细图形表示。这有助于可视化分支和合并。

4. **显示提交差异** - 可以使用选项 `--patch / -p` 查看每个提交的差异 (diff)。

5. **限制提交数量** - 可以使用 `-n` 选项限制提交数量。可以为 n 值指定一个数字。

6. **按消息搜索提交** - 可以使用 `--grep` 选项搜索提交。这将搜索提交消息中包含特定单词或短语的提交。

7. **查看特定文件的提交** - 也可以查看特定文件的提交历史记录。您只需要在 `git log` 命令的末尾指定 ``。

语法

命令 `git log` 具有以下语法

git log

它显示可以通过父链接从给定提交访问的提交,但不包括以符号 `^` 为前缀的提交。

git log feature-branch master ^bugfix-branch

该命令表示 **列出所有可从 feature-branch 或 master 访问的提交**,但不包括可从 **bugfix-branch** 访问的提交。

通过移除所有可从 **bugfix-branch** 访问的提交,它有效地显示了 **feature-branch** 和 **master** 独有的提交。

在 Git 语法中,`..` 是 `^ ` 的快捷方式。

这意味着列表中将包含可通过 `` 访问但不可通过 `` 访问的提交。

例如,这些命令是可互换的

git log feature-branch..master

git log master ^feature-branch

这两个命令实际上都表示列出可从 master 访问但不可从 **feature-branch** 访问的提交。

Git 计算两组提交之间的对称差,因此此格式 `..` 对合并特别有用。

它类似于使用此表示法执行更直接的集合差运算。

例如,它可以用来识别两个不同分支之间的差异。

git log branch1 branch2 --not $(git merge-base --all branch1 branch2)
git log branch1...branch2

这两个命令都生成可从分支 1 和 2 访问的提交的对称差。

此命令使用来自 `git-rev-list` 和 `git-diff` 命令的参数,允许修改显示内容以及如何显示每个提交引入的更改的选项。

选项

`git log` 提供以下选项

格式化选项

以下选项控制提交日志的显示方式

1. `--oneline` - 每个提交都显示在一行中,包含提交哈希和消息。

git log --oneline

2. `--pretty=` - 可以选择输出格式,可能包括 `oneline`、`short`、`medium`、`full`、`fuller` 和 `format:`。

自定义格式有一些占位符,如下所示:

  • `%H` - 提交哈希

  • `%h` - 缩写提交哈希

  • `%an` - 作者姓名

  • `%ae` - 作者邮箱

  • `%ar` - 作者日期,相对时间

  • `%s` - 提交消息

git log --pretty=short
git log --pretty=format:"%h - %an, %ar : %s"

3. `--graph` - 可以看到分支和合并历史的 ASCII 图表。

git log --graph

4. `--decorate[=short|full|auto|no]` - 使用此选项,可以在提交哈希旁边看到引用名称。

它默认为 `auto`,基于终端输出,确定如何显示像 `refs/heads/`、`refs/tags/` 和 `refs/remotes/` 这样的 ref 名称以及提交信息。

git log --decorate

5. `--no-decorate` - 使用此选项,无法在提交哈希旁边看到引用名称。

git log --no-decorate

6. `--stat` - 每个提交引入的更改摘要。

git log --stat

过滤选项

以下选项可用于过滤提交日志

1. `--author=` - 只显示由给定作者完成的提交。

git log --author="John Doe"

2. `--grep=` - 在提交消息中搜索特定模式。

git log --grep="fixed"

3. `--since=` 和 `--until=` - 可以显示最近或早于指定日期的提交。

git log --since="2015-01-01" --until="2015-01-02"

4. `--after=` 和 `--before=` - 与前一个类似,但语法不同。

git log --after="2015-01-01" --before="2015-01-05"

5. `--all` - 可以看到所有分支的提交历史。

git log --all

限制选项

以下选项可用于限制提交日志

1. `-n ` - 可以使用 `-n` 选项限制提交数量。可以为 n 值指定一个数字。

git log -n=5

2. `-p` - 可以使用选项 `--patch / -p` 查看每个提交的差异 (diff)。

git log -p

3. `--max-count=` - 这是限制提交数量的另一种方法。

git log --max-count=5

4. `--skip=` - 跳过指定的提交数量。

git log --skip=5

5. `--reverse` - 反转提交顺序。

git log --reverse

其他选项

其他一些杂项选项如下所示

1. `--follow` - 即使文件被重命名,`git log` 中的 `--follow` 选项也会跟踪其历史记录,但这仅适用于跟踪单个文件。

git log --follow

2. `--decorate-refs=` - 通过将它们与给定模式匹配来修饰引用。

git log --decorate-refs="refs/heads/*"

3. `--decorate-refs-exclude=` - 通过将它们与给定模式匹配来排除引用。

git log --decorate-refs-exclude="refs/heads/*"

4. `--name-only` - 只显示每个提交中更改的文件的名称。

git log --name-only

5. `--name-status` - 只显示每个提交中更改的文件的状态,例如已添加、已修改或已删除。

git log --name-status

6. `-S` - 搜索添加或删除给定字符串的提交。

git log -S"fixed"

7. `--clear-decorations` - Git `log` 命令中的 `--clear-decorations` 选项默认情况下会扩展修饰以包含所有引用,并重置任何之前的 `--decorate-refs` 或 `--decorate-refs-exclude` 设置。

git log --clear-decorations

8. `--source` - Git `log` 命令中的 `--source` 选项打印在命令行中用于到达每个提交的 ref 名称。

git log --source

选项组合

上述选项可以与 `git log` 命令组合使用,例如 `git log --all --name-only`、`git log --oneline --max-count=5` 等。

上述选项允许您自定义 `git log` 以满足您的特定需求,无论您是在搜索特定更改、分析分支的历史记录还是跟踪问题和修复。

广告