版本控制系统的优势在于记录变更。这些记录允许我们检索数据,比如提交(commits),查找错误和更新。然而,如果我们无法导航这个历史记录,所有这些历史记录将毫无用处。在这种情况下,我们需要使用git log命令。
Git log是一种用于查看和阅读仓库所有发生的变更历史的实用工具。可以使用多个选项与git log一起使用,以使历史记录更具体。
通常,git log是一系列提交的记录。git log包含以下数据:
- 提交哈希值 ,它是由SHA(安全哈希算法)算法生成的40个字符的校验和数据。它是一个唯一的数字。
- 提交作者元数据 :作者的信息,如作者姓名和电子邮件。
- 提交日期元数据 :这是提交的时间的日期时间戳。
- 提交标题/消息 :这是在提交消息中给出提交的概述。
如何退出git log命令
可能会出现一种情况,当你运行git log命令时,会卡住。你想输入或返回bash,但是你无法这样做。当你点击 Enter 键时,它会导航你到上一条命令,直到结束标志。
解决此问题的方法是按下 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的前七个字符和提交信息。
使用方法如下:
$ git log --oneline
因此,通常我们可以说–oneline标志使得git log显示:
- 每行一个提交
- SHA的前七个字符
- 提交消息
考虑以下输出:
正如我们可以从上述输出中更精确地看到的那样,每个提交都只显示为一行,包括一个七位数的 sha 编号和提交信息。
Git 日志统计
log 命令显示已被修改的文件。它还显示了行数和总记录的摘要行。
一般来说,我们可以说 stat 选项用于显示:
- 被修改的文件,
- 增加或删除的行数,
- 总记录变更的摘要行,
- 增加或删除的行。
可以按如下方式使用:
$ git log --stat
上面的命令将显示已经被修改的文件。请参考以下输出:
从上述输出中,我们可以看到所有列出的提交都是对存储库的修改。
Git log P 或 Patch
git log patch 命令显示已被修改的文件。它还显示了添加、删除和更新行的位置。
将被用于:
$ git log --patch
或者
$ git log -p
一般来说,我们可以说 –patch 标志用于显示:
- 被修改的文件
- 添加或删除的行的位置
- 具体的更改内容。
考虑下面的输出:
上面的输出显示了修改过的文件以及添加或删除的行所在的位置。
Git log图表
Git日志命令允许将您的Git日志显示为图表形式。要以图表形式列出提交记录,请使用–graph选项运行git log命令。它的运行方式如下:
$ git log --graph
为了使输出更具体,你可以将这个命令和 –oneline 选项结合起来使用。它将如下操作:
$ git log --graph --oneline
过滤提交历史
我们可以根据需要筛选输出结果,这是Git的一个独特功能。我们可以在输出结果上应用许多过滤器,如数量、日期、作者等。每个过滤器都有自己的规格。它们可用于在输出结果上实施一些导航操作。
让我们详细了解每个过滤器。
按数量:
我们可以使用git log命令限制输出提交的数量。这是最具体的命令。如果你只对少量的提交感兴趣,这个命令将去除复杂性。
要限制git log的输出,可以使用-选项。如果我们只想要最近的三个提交,可以在git log命令中传递参数-3。考虑下面的输出:
从上面的输出可以看出,我们可以限制git log的输出。
按日期和时间:
我们可以通过日期和时间来过滤输出。我们需要使用 --after 或 --before 参数来指定日期。这两个参数都接受多种日期格式。它会按以下方式运行:
$ git log --after="yy-mm-dd"
以上命令将显示在给定日期之后进行的所有提交。考虑下面的输出:
上述命令会列出“2019-11-01”之后的所有提交。
我们还可以传递适用的参考语句,如“yesterday”、“1 week ago”、“21 days ago”等。它会运行如下:
git log --after="21 days ago"
上述命令将显示21天前所做的提交。请查看下面的输出:
我们还可以追踪两个日期之间的提交。要追踪在两个日期之间创建的提交,请传递语句引用 --before 和 --after 日期。假设我们要追踪2019年11月1日至2019年11月8日之间的提交。我们将运行以下命令:
$ git log --after="2019-11-01" --before="2019-11-08 "
上述命令将显示在指定日期之间提交的记录。请参考以下输出:
上述输出显示了给定期间的提交记录。我们可以使用–since和–until而不是–after和–before,因为它们分别是同义词。
按作者过滤:
我们可以通过特定的用户来过滤提交记录。假设我们只想列出由特定团队成员提交的记录,我们可以使用-author标志来根据作者姓名过滤提交记录。该命令接受一个正则表达式,并返回与该模式匹配的作者所做的提交列表。您可以使用确切的名称而不是模式。该命令将运行如下:
$ git log --author="Author name"
上述命令将显示给定作者做出的所有提交。考虑下面的输出:
$ git log --author="Stephen"
上述语句将显示所有作者包含名称Stephen的提交记录。作者的名称不需要完全匹配; 它只需要指定的短语。
我们知道,作者的电子邮件也与作者的名称相关,因此我们可以使用作者的电子邮件作为模式或确切搜索。假设我们想要跟踪由电子邮件服务为google的作者的提交记录。为此,我们可以使用通配符”@gmail.com”。考虑下面的语句:
$ git log -author="@gmail.com"
上述命令将按照所给模式显示作者提交的内容。考虑以下输出:
根据提交消息进行过滤:
我们可以使用grep选项来根据提交消息进行过滤,它将起到作者选项的作用。
运行如下:
$ git log --grep=" Commit message."
我们可以使用提交消息的简写形式而不是完整的消息。请考虑下方的输出。
以上输出显示了所有包含单词“commit”的提交的提交消息。
还有许多其他可用的过滤选项,例如按文件名、内容等进行过滤。