Git - 查看提交历史


Git 能够详细记录项目随时间推移所做的更改历史。通过在每次提交中记录每个更改,Git 允许开发人员跟踪、还原并了解其代码库的演变过程。

提交历史对于从事项目的个人开发人员和团队来说都是关键资源,使他们能够审查过去的更改、调试问题并有效地协作。

提交历史的重要性

Git 中的提交历史本质上是快照的时间线,每个快照都代表项目开发中的一个点。通过查看提交历史,您可以:

  • 了解项目的演变:查看代码库如何随时间推移发生变化以及谁进行了这些更改。

  • 追踪错误:通过审查具体的提交来找出错误何时何地被引入。

  • 回滚到以前的版本:如果最近的更改导致问题,您可以回滚到代码的早期稳定版本。

  • 高效协作:团队可以看到其他人正在做什么,审查代码更改,并确保项目按计划进行。

`git log` 命令

您可以使用 **git log** 命令检查 Git 中的提交历史,该命令提供了对所做更改的完整概述,从而更容易跟踪开发进度。

**git log** 显示提交列表,从最新的提交开始,以及提交哈希、作者、日期和提交消息等信息。

要在 Git 中查看提交历史记录,请运行以下命令:

$ git log
$ git log
commit 94744071e847ab78390eb1b8a5e013dbeee7ced2 (HEAD -> main, origin/main, origin/HEAD)
Author: Tutorialspoint <[email protected]>
Date:   Wed Aug 07 17:51:17 2024 +0530

   modified the margin and font size

commit 1bc52022c8fe3ee799ccf36bdc3e6ec0c99bb9f5
Author: Tutorialspoint <[email protected]>
Date:   Wed Aug 07 13:01:47 2024 +0530

   changed the width dimension

commit a98962782a8bc6ac91b793b634eb5786b3fb85fc
Author: tonystark <[email protected]>
Date:   Sat Dec 10 08:35:10 2022 +0000

   Initial commit
:...skipping...

这个简单的日志视图为您提供了一个线性的提交历史,最新的更改显示在顶部。

**git log** 命令显示默认的提交历史视图,其中包括:

  • 提交哈希:提交的唯一标识符(SHA-1 哈希)。

  • 作者:进行提交的人员的姓名和电子邮件地址。

  • 日期:提交的日期和时间。

  • 提交消息:作者提供的简短描述,解释提交包含的内容。

Git log 命令显示了几种查看仓库历史记录的方法。

按文件浏览提交历史

有时,您可能希望查看特定文件的历史记录,而不是整个项目。Git 允许您使用 git log 命令和文件名来实现这一点。

git log <file>

如果您想查看影响文件的每个提交的差异,您可以添加 **-p** 标志。

$ git log -p -2

在上例中,**-p** 选项显示提交的详细视图,**-2** 显示最后两次提交。

$ git log -p -2
commit 45ef43e5c3664f9ff725ad7b41a80af6ab515 (HEAD -> main, origin/main, origin/HEAD)
Author: Tutorialspoint <[email protected]>
Date:   Wed Aug 07 17:51:17 2024 +0530

   changed top and right dimensions

diff --git a/main.html b/main.html
index f7f85dd..9b97bad 100644
--- a/main.html
+++ b/main.html
@@ -46,8 +46,8 @@
            display : inline-block;
            border  : 2px solid green;
            position: absolute;
-           right:45px;
            top: 36px;
+           right:42px; ^M
+           top:35px; ^M
:...skipping...
commit 45ef43e5c3664f9ff725ad7b41a80af6ab515 (Head -> main, origin/main, origin/HEAD)
Author: Tutorialspoint <[email protected]>
Date:   Wed Aug 07 18:56:17 2024 +0530

   changed top and right dimensions

diff --git a/main.html b/main.html
index f7f85dd..9b97bad 100644
--- a/main.html
+++ b/main.html
@@ -46,8 +46,8 @@

您可以使用 **git log --stat** 命令显示每次提交所做更改的简要概述,包括更改的文件数、添加或删除的行数以及文件名。

$ git log --stat
$ git log --stat
commit 45ef43e5c3664f9ff725ad7b41a80af6ab515 (HEAD -> main, origin/main, origin/HEAD)
Author: Tutorialspoint <[email protected]>
Date:   Wed Aug 07 17:51:17 2024 +0530

   changed top and right dimensions

main.html  |  4 ++--
1 file changed, 2 insertions(+), 2 deletion(-)

commit 94744071e847ab78390eb1b8a5e013dbeee7ced2
Author: Tutorialspoint <[email protected]>
Date:   Wed Aug 07 17:51:17 2024 +0530

   modified the margin and font size

main.html  |  4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)

commit 1bc52022c8fe3ee799ccf36bdc3e6ec0c99bb9f5
Author: Tutorialspoint <[email protected]>
:...skipping...
commit 45ef43e5c3664f9ff725ad7b41a80af6ab515 (Head -> main, origin/main, origin/HEAD)
Author: Tutorialspoint <[email protected]>
Date:   Wed Aug 07 13:01:47 2024 +0530

   changed top and right dimensions

如果您想完整了解每次提交所做的所有更改,包括添加、删除或修改的具体行。

$ git log --stat -p
$ git log --stat -p
commit 45ef43e5c3664f9ff725ad7b41a80af6ab515 (HEAD -> main, origin/main, origin/HEAD)
Author: Tutorialspoint <[email protected]>
Date:   Wed Aug 07 17:51:17 2024 +0530

   changed top and right dimensions
---
main.html  |  4 ++--
1 file changed, 2 insertions(+), 2 deletion(-)

diff --git a/main.html b/main.html
index f7f85dd..9b97bad 100644
--- a/main.html
+++ b/main.html
@@ -46,8 +46,8 @@
            display : inline-block;
            border  : 2px solid green;
            position: absolute;
:...skipping...
commit 45ef43e5c3664f9ff725ad7b41a80af6ab515 (Head -> main, origin/main, origin/HEAD)
Author: Tutorialspoint <[email protected]>
Date:   Wed Aug 07 18:56:17 2024 +0530

自定义 `git log` 输出

虽然 **git log** 的默认输出很有用,但您可以根据需要自定义它以显示更多或更少的信息。Git 提供了多个选项来格式化和筛选提交历史记录。

单行日志

如果您希望更简洁地查看提交历史,则每一提交显示在一行中,您可以使用 **--oneline** 标志。这对于快速概述历史记录特别有用。

$ git log --oneline

示例输出

abc1234 Add user authentication feature
def7890 Update README with installation instructions

此视图仅显示简写的提交哈希和提交消息,便于快速扫描历史记录。

按日期或作者筛选

您可以按日期、作者或两者的组合筛选提交历史记录。当您尝试查找特定提交或查看特定时间段内所做的更改时,这非常有用。

按日期筛选:要显示自特定日期以来进行的提交,请使用 **--since** 选项。

git log --since="2024-08-01"

按作者筛选:要查看特定作者所做的提交,请使用 **--author** 选项。

git log --author="Tutorialspoint "

您可以组合这些选项以进一步缩小历史记录范围。例如,要查看 Tutorialspoint 自 2024 年 8 月 1 日以来所做的所有提交:

git log --author="Tutorialspoint" --since="2024-08-01"

格式化提交输出

Git 允许您使用 --pretty 选项自定义每个提交的显示方式。您可以指定格式或使用 Git 的预定义格式之一。

简短格式

git log --pretty=short

自定义格式:您可以指定要查看提交的哪些元素。

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

命令 **git log --pretty=format:"%h - %an, %ar : %s"** 用于以简单的方式显示关于每个提交的特定信息。它将以简写的提交哈希、作者、日期和提交消息显示每一提交。

  • %h:提交哈希

  • %an:作者姓名

  • %ar:日期

  • %s:提交消息

$ git log --pretty=format:"%h - %an, %ar : %s"
$ git log --pretty=format:"%h - %an, %ar : %s"
09708ca - Tutorialspoint, 15 minutes ago : color and heading changed
45ef43e - Tutorialspoint, 18 hours ago : changed top and right dimensions
9474407 - Tutorialspoint, 19 hours ago : modified the margin and font size
1bc5202 - Tutorialspoint, 23 hours ago : changed the width dimension
a989627 - tonystark, 1 year, 5 months ago : Initial commit

下表显示了可与 **git log --pretty=format** 命令一起使用的有用的说明符。

说明符 输出描述
%H 提交哈希
%h 简写提交哈希
%T 树哈希
%t 简写树哈希
%P 父哈希
%p 简写父哈希
%an 作者姓名
%ae 作者邮箱
%ad 作者日期
%ar 作者日期(相对)
%cn 提交者姓名
%ce 提交者邮箱
%cd 提交者日期
%cr 提交者日期(相对)
%s 主题
  • 当您将 **--oneline** 或 **--format** 选项与 **--graph** 结合使用时,Git 会在每个提交语句旁边显示一个 ASCII 图表。

  • 命令 **git log --pretty=format:"%h %s" --graph** 以分支和合并历史的可视化表示形式显示每个提交的简写哈希和提交消息。

$ git log --pretty=format:"%h %s" --graph
$ git log --pretty=format:"%h %s" --graph
* 09708ca color and heading changed
* 45ef43e changed top and right dimensions
* 9474407 modified the margin and font size
* 1bc5202 changed the width dimension
* a989627 Initial commit
  • 命令 **git log --pretty=oneline** 用于快速或简短地概述大量提交,而无需遍历每个提交的几行数据。

  • 它将以简写的提交哈希和提交消息显示每一提交。

$ git log --pretty=oneline
$ git log --pretty=oneline
45ef43e5c3664f9ff725ad7b41a80af6ab515 (HEAD -> main, origin/main, origin/HEAD) changed top and right dimensions
94744071e847ab78390eb1b8a5e013dbeee7ced2 modified the margin and font size
1bc52022c8fe3ee799ccf36bdc3e6ec0c99bb9f5 changed the width dimension
a98962782a8bc6ac91b793b634eb5786b3fb85fc Initial commit

下表显示了 git log 的常见格式化选项。

选项 输出描述
-p 显示每次提交引入的补丁。
--stat 显示每次提交中修改的文件的统计信息。
--shortstat 仅显示 **--stat** 命令中的更改/插入/删除行。
--name-only 显示提交信息后修改的文件列表。
--name-status 显示受影响的文件列表以及添加/修改/删除信息。
--abbrev-commit 显示 SHA-1 校验和的前几个字符,而不是全部 40 个字符。
--relative-date 以相对格式显示日期(例如,“3 周前”),而不是使用完整日期格式。
--graph 在日志输出旁边显示分支和合并历史的 ASCII 图表。
--pretty 以替代格式显示提交。选项值包括 oneline、short、full、fuller 和 format(您在其中指定自己的格式)。
--oneline 一起使用的 **--pretty=oneline --abbrev-commit** 的简写。

限制日志输出

Git log 提供了一些有用的限制选项,允许您仅显示提交的子集。您可以使用 **-** 来显示最后 **n** 次提交。

Git 自动将所有输出定向到分页器,允许您一次仅查看一页日志输出。

您可以使用时间限制选项(如 **--since** 和 **--until**)查看特定时间间隔内的 Git 提交历史记录。

以下命令显示自三周前的提交历史

$ git log --since=3.weeks
commit 09708ca8bfee4ad20414511b2d847282b17b1c9f (Head -> main, origin/main, origin/HEAD)
Author: Tutorialspoint <[email protected]>
Date:   Thu Apr 18 12:15:17 2024 +0530

   color and heading changed

commit 45ef43e5c3664f9ff725ad7b41a80af6ab515
Author: Tutorialspoint <[email protected]>
Date:   Wed Aug 07 18:56:17 2024 +0530

   changed top and right dimensions

commit 94744071e847ab78390eb1b8a5e013dbeee7ced2
Author: Tutorialspoint <[email protected]>
Date:   Wed Aug 07 17:51:17 2024 +0530

   modified the margin and font size

commit 1bc52022c8fe3ee799ccf36bdc3e6ec0c99bb9f5
Author: Tutorialspoint <[email protected]>
Date:   Wed Aug 07 13:01:47 2024 +0530

以下命令显示自2022-03-17的提交历史

$ git log --since=2022-03-
commit 09708ca8bfee4ad20414511b2d847282b17b1c9f (Head -> main, origin/main, origin/HEAD)
Author: Tutorialspoint <[email protected]>
Date:   Thu Apr 18 12:15:17 2024 +0530

   color and heading changed

commit 45ef43e5c3664f9ff725ad7b41a80af6ab515
Author: Tutorialspoint <[email protected]>
Date:   Wed Aug 07 18:56:17 2024 +0530

   changed top and right dimensions

commit 94744071e847ab78390eb1b8a5e013dbeee7ced2
Author: Tutorialspoint <[email protected]>
Date:   Wed Aug 07 17:51:17 2024 +0530

   modified the margin and font size

:...skipping...
commit 09708ca8bfee4ad20414511b2d847282b17b1c9f (Head -> main, origin/main, origin/HEAD)

您可以使用搜索条件检查提交列表。--author选项用于标识特定作者,而--grep用于搜索提交消息中的关键词。

注意:您可以多次使用--author--grep选项,根据不同的条件过滤提交。添加--all-match选项可以将输出限制为满足所有给定--grep模式的提交。

-S选项被称为Git的“pickaxe”(镐)。它显示更改给定字符串出现次数的提交。

$ git log -S <string>
$ git log -S font-size
commit a98962782a8bc6ac91b793b634eb5786b3fb85fc
Author :tonystark <[email protected]>
Date : Sat Dec 10 08:35:10 2022 +0000

   Initial commit
  
   Created from https://vercel.com/new

您可以在git log --之后指定目录或文件名,这将过滤日志输出,只显示更改了这些文件的提交。

$ git log -- path/to/file
$ git log -- main.html
commit 09708ca8bfee4ad20414511b2d847282b17b1c9f (HEAD -> main, origin/main, origin/HEAD)
Author :Tutorialspoint <[email protected]>
Date : Thu Apr 18 12:15:17 2024 +0530

   color and heading changed

commit 45ef43e5c3664f9ff725ad7b41a80af6ab515
Author : Tutorialspoint <[email protected]>
Date :   Wed Aug 07 18:56:17 2024 +0530

   changed top and right dimensions

commit 94744071e847ab78390eb1b8a5e013dbeee7ced2
Author :Tutorialspoint <[email protected]>
Date : Wed Aug 07 17:51:17 2024 +0530

   modified the margin and font size

commit 1bc52022c8fe3ee799ccf36bdc3e6ec0c99bb9f5
Author :Tutorialspoint <[email protected]>
Date : Wed Aug 07 13:01:47 2024 +0530

下表显示了限制git log输出的选项

选项 输出描述
-<n> 显示每次提交引入的补丁。
--since, --after 将提交限制为在指定日期之后进行的提交。
--until, --before 将提交限制为在指定日期之前进行的提交。
--author 仅显示作者条目与指定字符串匹配的提交。
--committer 仅显示提交者条目与指定字符串匹配的提交。
--grep 仅显示提交消息包含该字符串的提交。
-S 仅显示添加或删除与该字符串匹配的代码的提交。

要查找2024年4月Tutorialspoint提交的更改Git源代码中测试文件的提交,请运行以下命令

$ git log --pretty="%h - %s" --author='Tutorialspoint' --since="2024-4-1" --before="2024-4-30"
09708ca - color and heading changed
45ef43e - changed top and right dimensions
9474407 - modified the margin and font size
1bc5202 - changed the width dimension

要查找提交历史的总大小,请运行以下命令

$ git log --log-size
commit 09708ca8bfee4ad20414511b2d847282b17b1c9f (HEAD -> main, origin/main, origin/HEAD)
log size: 122
Author :Tutorialspoint <[email protected]>
Date : Thu Apr 18 12:15:17 2024 +0530

   color and heading changed

commit 45ef43e5c3664f9ff725ad7b41a80af6ab515
log size: 130
Author :Tutorialspoint <[email protected]>
Date : Wed Aug 07 18:46:17 2024 +0530

   changed top and right dimensions

commit 94744071e847ab78390eb1b8a5e013dbeee7ced2
log size: 130
Author :Tutorialspoint <[email protected]>
Date : Wed Aug 07 17:51:17 2024 +0530

   modified the margin and font size

:...skipping...

要反向查找提交历史,请运行以下命令

$ git log --reverse
commit a98962782a8bc6ac91b793b634eb5786b3fb85fc
Author: tonystark <[email protected]>
Date: Sat Dec 10 08:35:10 2022 +0000

   Initial commit

   Created from https://vercel.com/

commit 1bc52022c8fe3ee799ccf36bdc3e6ec0c99bb9f5
Author: Tutorialspoint <[email protected]>
Date: Wed Aug 07 13:01:47 2024 +0530

   changed the width dimension

commit 94744071e847ab78390eb1b8a5e013dbeee7ced2
Author: Tutorialspoint 
Date: Wed Aug 07 17:51:17 2024 +0530

:...skipping...
commit a98962782a8bc6ac91b793b634eb5786b3fb85fc
Author :tonystark <[email protected]>
Date : Sat Dec 10 08:35:10 2022 +0000

   Initial commit

   Created from https://vercel.com/new
广告