版本控制系统的优势在于它记录了变化。这些记录使我们能够检索数据,如提交,弄清错误,更新。但是,如果我们不能浏览这些历史,所有这些历史都是无用的。在这一点上,我们需要git log命令。
Git 日志是一个实用工具,用于审查和阅读发生在仓库的一切历史。多个选项可以与git日志一起使用,使历史更加具体。
一般来说,git日志是对提交的记录。一个git日志包含以下数据。
- 提交哈希值,这是一个由SHA(安全哈希算法)算法生成的40个字符的检查和数据。它是一个唯一的数字。
- 提交作者元数据。作者的信息,如作者姓名和电子邮件。
- 提交日期元数据。这是一个提交时间的日期时间戳。
- 提交的标题/信息。这是在提交信息中给出的提交概述。
如何退出git log 命令
可能会有这样的情况发生,你运行了git log命令,然后你就卡在那里了。你想输入或回到bash,但你不能。当你点击回车键时,它会将你导航到旧的命令,直到结束标志。
解决这个问题的方法是按q(Q代表退出)。它将使你从这种情况下退出,并使你回到命令行。现在,你可以执行任何一个命令。
Git log命令基础
Git log 命令是 git 最常用的命令之一。它是Git最有用的命令。每次需要检查历史记录时,都要使用git log命令。基本的git log命令会显示最近的提交和头的状态。它将使用作为。
$ git log
上述命令将显示最后一次提交的内容。请看下面的输出。
上面的命令列出了所有最近的提交。每个提交都包含一些唯一的sha-id,它是由SHA算法生成的。它还包括日期、时间、作者和一些其他细节。
我们可以在命令行上执行一些动作,如滚动、跳跃、移动和退出。要在命令行上滚动,按k可以向上移动,按j可以向下移动,按空格键可以向下滚动一整页,按q可以从命令行上退出。
Git Log Oneline
oneline选项用来显示每行一个提交的输出。它也会显示简短的输出,如提交SHA的前七个字符和提交信息。
它的使用方法如下。
$ git log --oneline
所以,通常我们可以说,–oneline标志会导致git log显示。
- 一行一个commit
- SHA的前七个字符
- 提交信息
考虑下面的输出。
从上面的输出中我们可以更准确地看到,每次提交都只在一行中给出七位数的sha号和提交信息。
Git Log Stat
日志命令显示被修改的文件。它还显示行数和已更新的总记录的摘要行。
一般来说,我们可以说统计选项是用来显示
- 修改的文件。
- 已添加或删除的行数
- 改变的记录总数的摘要行
- 被添加或删除的线条。
它的使用方法如下。
$ git log --stat
上述命令将显示被修改的文件。请看下面的输出。
从上面的输出中,我们可以看到所有列出的提交在版本库中都有修改。
Git log P 或者 Patch
git log patch 命令显示被修改的文件。它还显示添加、删除和更新的行的位置。
它将被用作。
$ git log --patch
或者
$ git log -p
一般来说,我们可以说,–补丁标志是用来显示的。
- 修改过的文件
- 你添加或删除的线条的位置
- 已经做出的具体改变。
考虑下面的输出。
上面的输出显示的是修改过的文件和被添加或删除的行的位置。
Git Log Graph
Git log 命令允许以图表形式查看您的 git 日志。要以图表的形式列出提交的内容,请运行带有 –graph 选项的 git log 命令。它的运行方式如下。
$ git log --graph
为了使输出更加具体,你可以把这个命令和–oneline选项结合起来。它的操作方式如下。
$ git log --graph --oneline
筛选提交历史
我们可以根据自己的需要来过滤输出。这是Git的一个独特功能。我们可以在输出中应用许多过滤器,如数量、日期、作者等等。每个过滤器都有其规格。它们可以用来实现对输出的一些导航操作。
让我们详细了解这些过滤器中的每一个。
通过数量过滤
我们可以通过使用git log命令来限制输出提交的数量。这是最具体的命令。如果你对较少的提交感兴趣,这条命令将消除复杂性。
要限制git日志的输出,包括-<n>
选项。如果我们只想得到最后三次提交,那么我们可以在git log命令中传递参数-3。考虑一下下面的输出。
从上面的输出可以看出,我们可以限制git log的输出。
按日期和时间过滤
我们可以通过日期和时间来过滤输出。我们必须通过--after
或--before
参数来指定日期。这两个参数都接受各种日期格式。它的运行方式如下。
$ git log --after="yy-mm-dd"
上述命令将显示给定日期之后的所有提交。请看下面的输出。
上面的命令列出了 “2019-11-01 “之后的所有提交。
我们还可以传递适用的参考语句,如 “昨天”、”1周前”、”21天前 “等等。它将以如下方式运行
git log --after="21 days ago"
上述命令将显示21天前的提交。请看下面的输出。
我们还可以跟踪两个日期之间的提交。要跟踪在两个日期之间创建的提交,可以通过语句引用–之前和–之后的日期。假设,我们想跟踪 “2019-11-01 “和 “2019-11-08 “之间的提交。我们将按如下方式运行命令。
$ git log --after="2019-11-01" --before="2019-11-08 "
上述命令将显示日期之间的提交情况。请看下面的输出。
上面的输出显示的是给定时间段内的提交情况。我们可以用 –since 和 –until 来代替 –after 和 –before。因为它们分别是同义词。
通过作者过滤
我们可以按特定用户过滤提交。假设我们想只列出某个特定团队成员的提交。我们可以使用 -author 标志,按作者姓名过滤提交内容。该命令接受一个正则表达式,并返回符合该模式的作者提交的列表。你可以使用确切的名字而不是模式。这条命令的运行方式如下。
$ git log --author="Author name"
上述命令将显示指定作者所做的所有提交。请看下面的输出。
从上面的输出中,我们可以看到,作者ImDwivedi1的所有提交都被列出。
我们可以使用一个字符串,而不是正则表达式或确切的名称。考虑一下下面的语句。
$ git log --author="Stephen"
上面的语句将显示所有作者包括Stephen这个名字的提交。作者的名字不需要完全匹配,只要有指定的短语即可。
我们知道,作者的电子邮件与作者的名字也有关系,因此我们可以用作者的电子邮件作为模式或精确搜索。假设,我们想追踪那些电子邮件服务为google的作者的提交。为此,我们可以使用”@gmail.com “这样的通配符。请考虑下面的语句。
$ git log -author="@gmail.com"
上述命令将按模式中给出的作者显示提交的内容。请看下面的输出。
通过Commit信息过滤
要通过提交信息来过滤提交内容。我们可以使用grep选项,它将和作者选项一样发挥作用。
它将按以下方式运行。
$ git log --grep=" Commit message."
我们可以使用提交消息的简短形式,而不是完整的消息。请看下面的输出。
上面的输出显示的是所有在提交信息中包含commit字样的提交。
还有许多其他过滤选项,如我们可以按文件名、内容等进行过滤。