Git log

17 Mar 2025 | 6 分钟阅读

版本控制系统的优点是它会记录更改。这些记录允许我们检索数据,例如提交,找出错误,更新。但是,如果我们无法浏览所有这些历史记录,那么它将毫无用处。在这一点上,我们需要 git log 命令。

Git log 是一个实用工具,用于查看和读取存储库发生的所有历史记录。Git log 可以使用多个选项来使历史记录更加具体。

通常,git log 是提交的记录。git log 包含以下数据

  • 提交哈希,这是一个由 SHA(安全散列算法)算法生成的 40 个字符的校验和数据。它是一个唯一的数字。
  • 提交作者元数据:作者信息,例如作者姓名和电子邮件。
  • 提交日期元数据:它是提交时间的日期时间戳。
  • 提交标题/消息:这是提交消息中给出的提交概述。

如何退出 git log 命令?

可能会出现一种情况,您运行了 git log 命令,然后卡在那里。您想输入或返回 bash,但您无法做到。当您单击 Enter 键时,它会将您导航到较旧的命令,直到结束标志。

解决此问题的方法是 q (Q 表示退出) 键。它将让您退出该情况并返回到命令行。现在,您可以执行任何命令。

基本 Git log

Git log 命令是 git 最常用的命令之一。它是 Git 最有用的命令。每次您需要检查历史记录时,都必须使用 git log 命令。基本的 git log 命令将显示最新的提交和 head 的状态。它将使用为

上面的命令将显示最新的提交。考虑以下输出

Git log

上面的命令列出了所有最近的提交。每个提交都包含一些唯一的 sha-id,它是由 SHA 算法生成的。它还包括日期、时间、作者和一些其他详细信息。

我们可以在命令行上执行一些操作,例如滚动、跳转、移动和退出。要在命令行上滚动,请按 k 向上移动,j 向下移动,空格键向下滚动一整页,使用页面向上滚动,然后按 q 退出命令行。

<

Git Log Oneline

oneline 选项用于将输出显示为每行一个提交。它还简要显示输出,例如提交 SHA 的前七个字符和提交消息。

它将按如下方式使用

因此,通常我们可以说,--oneline 标志导致 git log 显示

  • 每行一个提交
  • SHA 的前七个字符
  • 提交消息

考虑下面的输出

Git log 1

正如我们从上面的输出中更精确地看到的那样,每个提交都只以一行给出,带有七位 sha 编号和提交消息。

Git Log Stat

log 命令显示已修改的文件。它还显示行数和已更新的总记录的摘要行。

通常,我们可以说 stat 选项用于显示

  • 已修改的文件,
  • 已添加或删除的行数
  • 已更改的总记录数的摘要行
  • 已添加或删除的行。

它将按如下方式使用

上面的命令将显示已修改的文件。考虑以下输出

Git log 2

从上面的输出中,我们可以看到所有列出的提交都是存储库中的修改。

Git log P 或 Patch

git log patch 命令显示已修改的文件。它还显示已添加、已删除和已更新行的位置。

它将用作

通常,我们可以说 --patch 标志用于显示

  • 修改的文件
  • 您添加或删除的行的位置
  • 已进行的特定更改。

考虑下面的输出

Git log 3

上面的输出显示了已修改的文件以及已添加或删除的行的位置。


Git Log Graph

Git log 命令允许将您的 git log 视为一个图形。要以图形的形式列出提交,请使用 --graph 选项运行 git log 命令。它将按如下方式运行

为了使输出更具体,您可以将此命令与 --oneline 选项结合使用。它将按如下方式运行

过滤提交历史记录

我们可以根据需要过滤输出。这是 Git 的一个独特功能。我们可以对输出应用许多过滤器,例如数量、日期、作者等。每个过滤器都有其规范。它们可以用于对输出实现一些导航操作。

让我们详细了解这些过滤器中的每一个。

按数量

我们可以使用 git log 命令限制输出提交的数量。这是最具体的命令。如果您对较少的提交感兴趣,此命令将消除复杂性。

要限制 git log 的输出,包括 - <n> 选项。如果我们只想获取最后三个提交,那么我们可以在 git log 命令中传递参数 -3。考虑以下输出

Git log 4

正如我们从上面的输出中看到的那样,我们可以限制 git log 的输出。

按日期和时间

我们可以按日期和时间过滤输出。我们必须传递 --after-before 参数来指定日期。这两个参数都接受各种日期格式。它将按如下方式运行

上面的命令将显示在给定日期之后进行的所有提交。考虑以下输出

Git log 5

上面的命令列出了 "2019-11-01" 之后的所有提交。

我们还可以传递适用的参考语句,例如“昨天”、“一周前”、“21 天前”等等。它将按如下方式运行

上面的命令将显示 21 天前完成的提交。考虑以下输出

Git log 6

我们也可以跟踪两个日期之间的提交。要跟踪在两个日期之间创建的提交,请在日期之前和之后传递一个语句引用 --before--after。假设,我们要跟踪“2019-11-01”和“2019-11-08”之间的提交。我们将按如下方式运行该命令

上面的命令将显示在这两个日期之间进行的提交。考虑以下输出

Git log 7

上面的输出显示了在给定时间段内的提交。我们可以使用 --since 和 --until 代替 --after 和 --before。因为它们分别是同义词。

按作者

我们可以按特定用户过滤提交。假设,我们要仅列出由特定团队成员进行的提交。我们可以使用 -author 标志按作者姓名过滤提交。此命令采用正则表达式并返回与该模式匹配的作者所做的提交列表。您可以使用确切的名称而不是模式。此命令将按如下方式运行

上面的命令将显示给定作者所做的所有提交。考虑以下输出

Git log 8

从上面的输出中,我们可以看到由作者 ImDwivedi1 做的所有提交都列出了。

我们可以使用字符串而不是正则表达式或确切的名称。考虑以下语句

上面的语句将显示其作者包含名称 Stephen 的所有提交。作者的姓名不需要完全匹配;它只需要指定的短语。

众所周知,作者的电子邮件也与作者的姓名相关,因此我们可以将作者的电子邮件用作模式或精确搜索。假设,我们要跟踪作者的电子邮件服务为 google 的提交。为此,我们可以使用通配符作为 "@gmail.com"。考虑以下语句

上面的命令将按模式中给出的作者显示提交。考虑以下输出

Git log 9

按提交消息

要按提交消息过滤提交。我们可以使用 grep 选项,它将与作者选项一样工作。

它将按如下方式运行

我们可以使用提交消息的简短形式而不是完整的消息。考虑以下输出。

Git log 10

上面的输出显示了在其提交消息中包含单词 commit 的所有提交。

还有许多其他过滤选项可用,例如我们可以按文件名、内容等进行过滤。


下一个主题Git Diff