本文主要是介绍查看提交历史 —— Git 学习笔记 11,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
查看提交历史
- 查看提交历史
- 不带任何选项的git log
- -p选项
- --stat 选项
- --pretty=oneline选项
- --pretty=format选项
- git log常用选项列表
- 参考资料
在提交了若干更新,又或者克隆了某个项目之后,你也许想回顾下提交历史。 完成这个任务最简单而又有效的
工具是 git log 命令。
接下来的例子会用一个用于演示的 simplegit 项目, 运行下面的命令获取该项目源代码:
git clone https://github.com/schacon/simplegit-progit
Cloning into 'simplegit-progit'...
remote: Counting objects: 13, done.
remote: Total 13 (delta 0), reused 0 (delta 0), pack-reused 13
Unpacking objects: 100% (13/13), done.
克隆完成后,当前目录下会多出一个文件夹 simplegit-progit
$ cd simplegit-progit/
$ ls
lib/ Rakefile README
不带任何选项的git log
运行 git log,应该会看到下面的输出:
$ git log
commit ca82a6dff817ec66f44342007202690a93763949 (HEAD -> master, origin/master, origin/HEAD)
Author: Scott Chacon <schacon@gmail.com>
Date: Mon Mar 17 21:52:11 2008 -0700changed the verison numbercommit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7
Author: Scott Chacon <schacon@gmail.com>
Date: Sat Mar 15 16:40:33 2008 -0700removed unnecessary test codecommit a11bef06a3f659402fe7563abf99ad00de2209e6
Author: Scott Chacon <schacon@gmail.com>
Date: Sat Mar 15 10:31:28 2008 -0700first commit
默认不用任何参数的话,git log 会按提交时间列出所有的更新,最近的更新排在最上面。 正如你所看到的,这个命令会列出每个提交的 SHA-1 校验和、作者的名字和电子邮件地址、提交时间以及提交说明。
也许你会疑惑第二行的(HEAD -> master, origin/master, origin/HEAD)
,我的理解是:
虽然远程仓库没有工作目录,但是依然可以有 HEAD 指针,即origin/HEAD
。这个 HEAD 指针指向远程仓库的默认分支,当克隆远程仓库的时候,只有这个默认分支会被克隆,克隆后就是本地的 master 分支。HEAD -> master
表示当前在 master 分支上。
git log 有许多选项可以帮助你搜寻你所要找的提交, 接下来我们介绍些最常用的。
-p
选项
一个常用的选项是 -p
,用来显示每次提交的内容差异。 你也可以加上 -2
来仅显示最近两次提交:
$ git log -p -2
commit ca82a6dff817ec66f44342007202690a93763949 (HEAD -> master, origin/master, origin/HEAD)
Author: Scott Chacon <schacon@gmail.com>
Date: Mon Mar 17 21:52:11 2008 -0700changed the verison numberdiff --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::RUBYs.name = "simplegit"
- s.version = "0.1.0"
+ s.version = "0.1.1"s.author = "Scott Chacon"s.email = "schacon@gmail.com"s.summary = "A simple gem for using Git in Ruby code."commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7
Author: Scott Chacon <schacon@gmail.com>
Date: Sat Mar 15 16:40:33 2008 -0700removed unnecessary test codediff --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 SimpleGitendend
-
-if $0 == __FILE__
- git = SimpleGit.new
- puts git.show
-end
\ No newline at end of file
该选项除了显示基本信息之外,还附带了每次 commit 的变化。 当进行代码审查,或者快速浏览某个同事提交
的 commit 所带来的变化的时候,这个参数就非常有用了。
--stat
选项
如果你觉得这些信息太啰嗦,那么可以为 git log 附带一系列的总结性选项。比如说,如果想看每次提交的简略统计信息,可以使用 --stat
选项:
$ git log --stat
commit ca82a6dff817ec66f44342007202690a93763949 (HEAD -> master, origin/master, origin/HEAD)
Author: Scott Chacon <schacon@gmail.com>
Date: Mon Mar 17 21:52:11 2008 -0700changed the verison numberRakefile | 2 +-1 file changed, 1 insertion(+), 1 deletion(-)commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7
Author: Scott Chacon <schacon@gmail.com>
Date: Sat Mar 15 16:40:33 2008 -0700removed unnecessary test codelib/simplegit.rb | 5 -----1 file changed, 5 deletions(-)commit a11bef06a3f659402fe7563abf99ad00de2209e6
Author: Scott Chacon <schacon@gmail.com>
Date: Sat Mar 15 10:31:28 2008 -0700first commitREADME | 6 ++++++Rakefile | 23 +++++++++++++++++++++++lib/simplegit.rb | 25 +++++++++++++++++++++++++3 files changed, 54 insertions(+)
(END)
正如你所看到的,--stat
选项在每次提交的下面列出所有被修改过的文件、有多少文件被修改了以及被修改过
的文件有多少行被修改了(删除或者添加)。 在每次提交的最后还有一个总结——有几个文件被修改,一共增加了几行,删除了几行。
--pretty=oneline
选项
另外一个常用的选项是 --pretty
。 这个选项可以指定使用不同于默认格式的方式展示提交历史。 这个选项有
一些内建的子选项供你使用。 比如用 oneline 将每个提交放在一行显示,当查看的提交数很大时非常有用。
$ git log --pretty=oneline
ca82a6dff817ec66f44342007202690a93763949 (HEAD -> master, origin/master, origin/HEAD) changed the verison number
085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7 removed unnecessary test code
a11bef06a3f659402fe7563abf99ad00de2209e6 first commit
--pretty=format
选项
最有意思的是 format,可以定制要显示的记录格式。比如:
$ git log --pretty=format:"%h - %an, %ar : %s"
ca82a6d - Scott Chacon, 10 years ago : changed the verison number
085bb3b - Scott Chacon, 10 years ago : removed unnecessary test code
a11bef0 - Scott Chacon, 10 years ago : first commit
git log --pretty=format
常用的选项有:
你一定奇怪 “作者” 和 “提交者” 之间究竟有何差别, 其实作者指的是实际作出修改的人,提交者指的是最后将此工
作成果提交到仓库的人。 所以,当你为某个项目发布补丁,然后某个核心成员将你的补丁并入项目时,你就是
作者,而那个核心成员就是提交者。
当 oneline 或 format 与另一个 log 选项 --graph
结合使用时,Git 会用一些ASCII字符串来形象地展示你的分支、合并历史:
$ git log --pretty=format:"%h %s" --graph
* 2d3acf9 ignore errors from SIGCHLD on trap
* 5e3ee11 Merge branch 'master' of git://github.com/dustin/grit
|\
| * 420eac9 Added a method for getting the current branch.
* | 30e367c timeout code and tests
* | 5a09431 add timeout protection to grit
* | e1193f8 support for heads with slashes in them
|/
* d6016bc require time for xmlschema
* 11d191e Merge branch 'defunkt' into local
git log
常用选项列表
以上只是简单介绍了一些 git log 命令支持的选项。 下表中的 git log 常用选项列出了我们目前涉及到的和没涉及到的选项,以及它们是如何影响 log 命令的输出的:
参考资料
《精通Git(第2版)》,Scott Chacon & Ben Straub,人民邮电出版社
这篇关于查看提交历史 —— Git 学习笔记 11的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!