Git 基础知识 - 查看提交历史记录
查看提交历史记录
在创建了多个提交之后,或者如果您克隆了具有现有提交历史记录的存储库,则可能需要回顾一下以查看发生了什么。执行此操作的最基本和最强大的工具是命令。git log
这些示例使用了一个非常简单的项目,称为“simplegit”。若要获取项目,请运行:
$ git clone https://github.com/schacon/simplegit-progit
在此项目中运行时,应获得如下所示的输出:git log
$ git log
commit ca82a6dff817ec66f44342007202690a93763949
Author: Scott Chacon <xq-mail.com>
Date: Mon Mar 1721:52:11 2018 -0700
Change version number
commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7
Author: Scott Chacon <xq-mail.com>
Date: Sat Mar 1516:40:33 2018 -0700
Remove unnecessary test
commit a11bef06a3f659402fe7563abf99ad00de2209e6
Author: Scott Chacon <xq-mail.com>
Date: Sat Mar 1510:31:28 2018 -0700
Initial commit
默认情况下,在没有参数的情况下,按时间倒序列出在该存储库中进行的提交;也就是说,最新的提交首先显示。如您所见,此命令列出了每个提交及其 SHA-1 校验和、作者的姓名和电子邮件、写入日期以及提交消息。git log
该命令有大量和各种选项可用于向您准确显示您要查找的内容。在这里,我们将向您展示一些最受欢迎的。git log
其中一个更有用的选项是 or ,它显示了每次提交中引入的差异(修补程序输出)。您还可以限制显示的日志条目数,例如 使用 仅显示最后两个条目。-p–patch-2
$ git log -p -2
commit ca82a6dff817ec66f44342007202690a93763949
Author: Scott Chacon <sxw-mail.com>
Date: Mon Mar 1721:52:11 2018 -0700
Change version number
diff --git a/Rakefile b/Rakefile
index a874b73..8f94139 100644
--- a/Rakefile
+++ b/Rakefile
@@ -5,7 +5,7 @@ require 'rake/gempackagetask'
spec = Gem::Specification.new do|s|
s.platform = Gem::Platform::RUBY
s.name ="simplegit"
- s.version ="0.1.0"
+ s.version ="0.1.1"
s.author ="Scott Chacon"
s.email ="[email protected]"
s.summary ="A simple gem for using Git in Ruby code."
commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7
Author: Scott Chacon <[email protected]>
Date: Sat Mar 1516:40:33 2018 -0700
Remove unnecessary testdiff --git a/lib/simplegit.rb b/lib/simplegit.rb
index a0a60ae..47c6340 100644
--- a/lib/simplegit.rb
+++ b/lib/simplegit.rb
@@ -18,8 +18,3 @@ class SimpleGit
end
end
-
-if $0== __FILE__
- git= SimpleGit.new
- puts git.show
-end
此选项显示相同的信息,但每个条目后面都有一个差异。这对于代码审查或快速浏览协作者添加的一系列提交期间发生的情况非常有用。您还可以将一系列汇总选项与 结合使用。例如,如果您想查看每个提交的一些缩写统计信息,则可以使用以下选项:git log–stat
$ git log --stat
commit ca82a6dff817ec66f44342007202690a93763949
Author: Scott Chacon <xq-mail.com>
Date: Mon Mar 1721:52:11 2018 -0700
Change version number
Rakefile |2 +-
1file changed, 1 insertion(+), 1 deletion(-)
commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7
Author: Scott Chacon <xq-mail.com>
Date: Sat Mar 1516:40:33 2018 -0700
Remove unnecessary test
lib/simplegit.rb |5 -----
1file changed, 5 deletions(-)
commit a11bef06a3f659402fe7563abf99ad00de2209e6
Author: Scott Chacon <xq-mail.com>
Date: Sat Mar 1510:31:28 2018 -0700
Initial commit
README |6 ++++++
Rakefile |23 +++++++++++++++++++++++
lib/simplegit.rb |25 +++++++++++++++++++++++++
3 files changed, 54 insertions(+)
如您所见,该选项在每个提交条目下方打印已修改文件的列表、更改的文件数以及添加和删除这些文件中的行数。它还将信息摘要放在最后。–stat
另一个真正有用的选项是 。此选项将日志输出更改为默认格式以外的格式。有几个预构建的选项值可供您使用。此选项的值将每个提交打印在一行上,如果您要查看大量提交,这将非常有用。此外,、 和值分别以大致相同的格式显示输出,但信息较少或更多:–prettyonelineshortfullfuller
$ git log --pretty=oneline
ca82a6dff817ec66f44342007202690a93763949 Change version number
085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7 Remove unnecessary test
a11bef06a3f659402fe7563abf99ad00de2209e6 Initial commit
最有趣的选项值是 ,它允许您指定自己的日志输出格式。当您为机器解析生成输出时,这尤其有用 - 因为您显式指定了格式,因此您知道它不会随着 Git 的更新而更改:format
$ git log --pretty=format:"%h - %an, %ar : %s"
ca82a6d - Scott Chacon, 6 years ago : Change version number
085bb3b - Scott Chacon, 6 years ago : Remove unnecessary test
a11bef0 - Scott Chacon, 6 years ago : Initial commit
查看提交历史记录
在创建了多个提交之后,或者如果您克隆了具有现有提交历史记录的存储库,则可能需要回顾一下以查看发生了什么。执行此操作的最基本和最强大的工具是命令。git log
这些示例使用了一个非常简单的项目,称为“simplegit”。若要获取项目,请运行:
$ git clone https://github.com/schacon/simplegit-progit
在此项目中运行时,应获得如下所示的输出:git log
$ git log
commit ca82a6dff817ec66f44342007202690a93763949
Author: Scott Chacon <xq-mail.com>
Date: Mon Mar 1721:52:11 2018 -0700
Change version number
commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7
Author: Scott Chacon <xq-mail.com>
Date: Sat Mar 1516:40:33 2018 -0700
Remove unnecessary test
commit a11bef06a3f659402fe7563abf99ad00de2209e6
Author: Scott Chacon <xq-mail.com>
Date: Sat Mar 1510:31:28 2018 -0700
Initial commit
默认情况下,在没有参数的情况下,按时间倒序列出在该存储库中进行的提交;也就是说,最新的提交首先显示。如您所见,此命令列出了每个提交及其 SHA-1 校验和、作者的姓名和电子邮件、写入日期以及提交消息。git log
该命令有大量和各种选项可用于向您准确显示您要查找的内容。在这里,我们将向您展示一些最受欢迎的。git log
其中一个更有用的选项是 or ,它显示了每次提交中引入的差异(修补程序输出)。您还可以限制显示的日志条目数,例如 使用 仅显示最后两个条目。-p–patch-2
$ git log -p -2
commit ca82a6dff817ec66f44342007202690a93763949
Author: Scott Chacon <xq-mail.com>
Date: Mon Mar 1721:52:11 2008 -0700
Change version number
diff --git a/Rakefile b/Rakefile
index a874b73..8f94139 100644
--- a/Rakefile
+++ b/Rakefile
@@ -5,7 +5,7 @@ require 'rake/gempackagetask'
spec = Gem::Specification.new do|s|
s.platform = Gem::Platform::RUBY
s.name ="simplegit"
- s.version ="0.1.0"
+ s.version ="0.1.1"
s.author ="Scott Chacon"
s.email ="xq-mail.com"
s.summary ="A simple gem for using Git in Ruby code."
commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7
Author: Scott Chacon <xq-mail.com>
Date: Sat Mar 1516:40:33 2008 -0700
Remove unnecessary testdiff --git a/lib/simplegit.rb b/lib/simplegit.rb
index a0a60ae..47c6340 100644
--- a/lib/simplegit.rb
+++ b/lib/simplegit.rb
@@ -18,8 +18,3 @@ class SimpleGit
end
end
-
-if $0== __FILE__
- git= SimpleGit.new
- puts git.show
-end
此选项显示相同的信息,但每个条目后面都有一个差异。这对于代码审查或快速浏览协作者添加的一系列提交期间发生的情况非常有用。您还可以将一系列汇总选项与 结合使用。例如,如果您想查看每个提交的一些缩写统计信息,则可以使用以下选项:git log–stat
$ git log --stat
commit ca82a6dff817ec66f44342007202690a93763949
Author: Scott Chacon <xq-mail.com>
Date: Mon Mar 1721:52:11 2008 -0700
Change version number
Rakefile |2 +-
1file changed, 1 insertion(+), 1 deletion(-)
commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7
Author: Scott Chacon <xq-mail.com>
Date: Sat Mar 1516:40:33 2008 -0700
Remove unnecessary test
lib/simplegit.rb |5 -----
1file changed, 5 deletions(-)
commit a11bef06a3f659402fe7563abf99ad00de2209e6
Author: Scott Chacon <xq-mail.com>
Date: Sat Mar 1510:31:28 2008 -0700
Initial commit
README |6 ++++++
Rakefile |23 +++++++++++++++++++++++
lib/simplegit.rb |25 +++++++++++++++++++++++++
3 files changed, 54 insertions(+)
如您所见,该选项在每个提交条目下方打印已修改文件的列表、更改的文件数以及添加和删除这些文件中的行数。它还将信息摘要放在最后。–stat
另一个真正有用的选项是 。此选项将日志输出更改为默认格式以外的格式。有几个预构建的选项值可供您使用。此选项的值将每个提交打印在一行上,如果您要查看大量提交,这将非常有用。此外,、 和值分别以大致相同的格式显示输出,但信息较少或更多:–prettyonelineshortfullfuller
$ git log --pretty=oneline
ca82a6dff817ec66f44342007202690a93763949 Change version number
085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7 Remove unnecessary test
a11bef06a3f659402fe7563abf99ad00de2209e6 Initial commit
最有趣的选项值是 ,它允许您指定自己的日志输出格式。当您为机器解析生成输出时,这尤其有用 - 因为您显式指定了格式,因此您知道它不会随着 Git 的更新而更改:format
$ git log --pretty=format:"%h - %an, %ar : %s"
ca82a6d - Scott Chacon, 6 years ago : Change version number
085bb3b - Scott Chacon, 6 years ago : Remove unnecessary test
a11bef0 - Scott Chacon, 6 years ago : Initial commit
限制日志输出
除了输出格式化选项外,还采取了许多有用的限制选项;也就是说,允许您仅显示提交子集的选项。您已经看到了一个这样的选项 - 该选项,它仅显示最后两个提交。实际上,您可以执行 ,其中 任何整数都显示上次提交。实际上,您不太可能经常使用它,因为默认情况下,Git 会通过寻呼机管道传输所有输出,因此您一次只能看到一页日志输出。git log-2-nn
但是,诸如 和 之类的时间限制选项非常有用。例如,以下命令获取过去两周内提交的列表:–since–until
$ git log --since=2.weeks
此命令适用于多种格式 — 您可以指定特定日期(如 或 相对日期,如 )。"2018-01-15"“2 years 1 day 3 minutes ago”
您还可以筛选列表以提交与某些搜索条件匹配的提交。该选项允许您筛选特定作者,该选项允许您在提交消息中搜索关键字。–author–grep
另一个真正有用的过滤器是选项(俗称Git的“pickaxe”选项),它接受一个字符串,只显示那些改变了该字符串出现次数的提交。例如,如果要查找添加或删除对特定函数的引用的最后一次提交,可以调用:-S
$ git log -S function_name
作为筛选器传递到的最后一个真正有用的选项是路径。如果指定目录或文件名,则可以将日志输出限制为对这些文件进行更改的提交。这始终是最后一个选项,通常前面有双破折号 (),以将路径与选项分开:git log–
$ git log -- path/to/file
例如,如果您想查看哪些修改 Git 源代码历史记录中的测试文件的提交是由 Junio Hamano 在 2008 年 10 月提交的,而不是合并提交,则可以运行如下操作:
$ git log --pretty="%h - %s" --author='Junio C Hamano' --since="2018-10-01"\
--before="2008-11-01" --no-merges -- t/
5610e3b - Fix testcase failure when extended attributes are in use
acd3b9e - Enhance hold_lock_file_for_{update,append}() API
f563754 - demonstrate breakage of detached checkout with symbolic link HEAD
d1a43f2 - reset --hard/read-tree --reset -u: remove unmerged new paths
51a94af - Fix "checkout --track -b newbranch" on detached HEAD
b0ad11e - pull: allow "git pull origin $something:$current_branch" into an unborn branch
在 Git 源代码历史记录中的近 40,000 个提交中,此命令显示与这些条件匹配的 6 个提交。
版权归原作者 给我打包一份三十块钱的外卖 所有, 如有侵权,请联系我们删除。