git log 命令

// 终端显示 git log 命令的输出结果
zhanghuabin-mac:course-git-blog-project zhanghuabin$ git log

commit a3dc99a197c66ccb87e3f4905502a6c6eddd15b1
Author: Richard Kalehoff <richardkalehoff@gmail.com>
Date:   Mon Dec 5 16:34:15 2016 -0500

    Center content on page

commit 6f04ddd1fb41934c52e290bc937e45f9cd5949aa
Author: Richard Kalehoff <richardkalehoff@gmail.com>
Date:   Mon Dec 5 16:30:40 2016 -0500

    Add breakpoint for large-sized screens
:

上面是这个仓库中的提交日志,显示了多次提交。每次提交显示了提交的 SHA、提交人、提交日期以及提交说明(一个简短描述,说明在这个提交中作了哪些更改)。下面的 : 冒号表示可以显示更多的输出行,我们可以按 J 键或向下箭头可以一次向下滚动一行。当冒号变为单词 END 时,表示最后一个提交。要离开分页器按下 q 键即可。

git log 命令用于显示仓库中所有 commit 的信息。默认情况下,该命令会显示仓库中每个 commit 的:

  • SHA
  • 作者
  • 日期
  • 消息

git 使用命令行分页器 less 浏览所有信息。以下是 less 的重要快捷键:

  • 要按行向下滚动,使用 j 或 ↓
  • 要按行向上滚动,使用 k 或 ↑
  • d 键可以向下滚动半个页面,用 u 键可以向上滚动半个页面
  • 要退出,使用 q

查看本地仓库所有镜像 查看仓库记录_css

git log --oneline 选项用于更改 git log 显示信息的方式。此命令:

  • 每行显示一个 commit
  • 显示 commit 的 SHA 的前 7 个字符
  • 显示 commit 的消息

查看本地仓库所有镜像 查看仓库记录_git命令_02

git log --stat,用于更改 git log 显示信息的方式。此命令会:

  • 显示被修改的文件
  • 显示添加/删除的行数
  • 显示一个摘要,其中包含修改/删除的总文件数和总行数

查看本地仓库所有镜像 查看仓库记录_css_03

上图示例中,它会同时包括实际的代码更改或对 css 文件所做的补丁 输出。diff 差异和补丁指的是同一回事,补丁显示的是文件的原始版本和更新版本之间的差异。我们看到的是 css 文件,它出现在一个名为 a 的目录中,但你并不会在库中实际看到这个目录,然后是第二个版本,它出现在 b 目录中,因为它是第二个。这两个名称相同,因为我们看到的是同一个文件的两个不同版本。下一行显示的是文件更改前第一个版本的哈希值和更改后的哈希值,它们也是文件的新旧版本。下面是 CSS 文件的实际代码,前面带有加号的绿色行表示这些行是此次提交添加的。

@@ -38,6 +38,11 @@ p {
     line-height: 1.5;
 }

它可以告诉我们文件哪里做出了编辑,这说明在文件的较旧或原始版本中(-38),这段代码来自第 38 行并显示了六行代码。在文件的较新或当前版本中(+38),但现在有 11 行代码,原来的六行加上新的五行,变成了 11 行代码。

git 按行进行跟踪编辑,所以如果对一行进行编辑,它会显示该行被移除,然后再被添加。补丁输出的重要内容是我们正在查看的文件和修改,另外我们有时也需要知道文件中哪些地方进行了修改。

git log -p(--patch),用来更改 git log 显示信息的方式。此命令会向默认输出中添加以下信息:

  • 显示被修改的文件
  • 显示添加/删除的行所在的位置
  • 显示做出的实际更改

git log -p 输出结果详细说明

查看本地仓库所有镜像 查看仓库记录_分页_04

查看本地仓库所有镜像 查看仓库记录_查看本地仓库所有镜像_05

git log --statgit log -p 都是非常实用的命令。运行 git log -p --stat,它同时显示这两种信息,并且统计信息显示在补丁信息上方。

查看本地仓库所有镜像 查看仓库记录_分页_06

git log -p -w 中的 -w 忽略所有的空间空格更改。即使一行有空格而另一行没有空格,这也会忽略差异。

上一部分需要在补丁输出中不断向下滚动,以便找到正确的 commit 并查看其信息。如果能显示特定 commit 的详情,而不用关心仓库中的所有其他内容?

实际上有两种实现方式!

  • git log 提供你要查看的 commit 的 SHA
  • 使用新的 git show 命令

可以向所有这些命令提供 commit 的 SHA 作为最后一个参数:

查看本地仓库所有镜像 查看仓库记录_查看本地仓库所有镜像_07

通过提供 SHA,git log -p 命令将从这条 commit 开始!无需滚动并逐条查阅!注意,它还会显示在所提供的 SHA 之前提交的所有 commit 信息

git show,另一个显示特定 commit 的命令。它将仅显示一个 commit。因此,如果你看不到任何其他 commit,不要惊慌。它只显示一个 commit。git show 命令的输出和 git log -p 命令的完全一样。

但是,git show 可以与我们了解过的大部分其他选项一起使用:

  • --stat - 显示更改了多少文件,以及添加/删除的行数
  • -p--patch - 显示默认补丁信息,但是如果使用了 --stat,将不显示补丁信息,因此传入 -p 以再次添加该信息
  • -w - 忽略空格变化