美文网首页
Git 轻松入门学习笔记(二)

Git 轻松入门学习笔记(二)

作者: GoldenGraden | 来源:发表于2018-07-18 21:25 被阅读14次

查询


$ git log
查看提交记录

官方手册使用了simplegit项目用于演示。

$ git clone https://github.com/schacon/simplegit-progit获取项目。

下面的例子都采用官方的项目来展示。

经常使用的参数:

-p  显示每次提交内容差异


$ git log -p -1

commit ca82a6dff817ec66f44342007202690a93763949 (HEAD -> master, origin/master, origin/HEAD)

Author: Scott Chacon <schacon@gmail.com>

Date: Mon Mar 17 21:52:11 2008 -0700

 changed the verison 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 = "schacon@gmail.com"

 s.summary = "A simple gem for using Git in Ruby code."

这里我使用了-1参数,如果不使用的话,Bash会自动调用分页程序,这个时候按Q键可以终止显示。(后面都加上-1属性,显示一条记录)

-<n>  显示最近的n次提交记录


$ git log -2

commit ca82a6dff817ec66f44342007202690a93763949 (HEAD -> master, origin/master, origin/HEAD)

Author: Scott Chacon <schacon@gmail.com>

Date: Mon Mar 17 21:52:11 2008 -0700

 changed the verison number

commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7

Author: Scott Chacon <schacon@gmail.com>

Date: Sat Mar 15 16:40:33 2008 -0700

 removed unnecessary test code

--stat  显示每次更新的文件修改信息


$ git log --stat -1

commit ca82a6dff817ec66f44342007202690a93763949 (HEAD -> master, origin/master, origin/HEAD)

Author: Scott Chacon <schacon@gmail.com>

Date: Mon Mar 17 21:52:11 2008 -0700

 changed the verison number

 Rakefile | 2 +-

 1 file changed, 1 insertion(+), 1 deletion(-)

--shortstat  只显示--stat中最后的行数修改添加删除统计


$ git log --shortstat -1

commit ca82a6dff817ec66f44342007202690a93763949 (HEAD -> master, origin/master, origin/HEAD)

Author: Scott Chacon <schacon@gmail.com>

Date: Mon Mar 17 21:52:11 2008 -0700

 changed the verison number

 1 file changed, 1 insertion(+), 1 deletion(-)

--name-only  仅在提交信息后显示已修改的文件清单。


$ git log --name-only -1

commit ca82a6dff817ec66f44342007202690a93763949 (HEAD -> master, origin/master, origin/HEAD)

Author: Scott Chacon <schacon@gmail.com>

Date: Mon Mar 17 21:52:11 2008 -0700

 changed the verison number

Rakefile

--name-status  显示新增、修改、删除的文件清单。


$ git log --name-status -1

commit ca82a6dff817ec66f44342007202690a93763949 (HEAD -> master, origin/master, origin/HEAD)

Author: Scott Chacon <schacon@gmail.com>

Date: Mon Mar 17 21:52:11 2008 -0700

 changed the verison number

M Rakefile

--abbrev-commit  仅显示SHA-1的前几个字符,而非所有的40个字符。


$ git log --abbrev-commit -1

commit ca82a6d (HEAD -> master, origin/master, origin/HEAD)

Author: Scott Chacon <schacon@gmail.com>

Date: Mon Mar 17 21:52:11 2008 -0700

 changed the verison number

--relative-date   使用较短的相对时间显示(比如,“2 weeks ago”)


$ git log --relative-date -1

commit ca82a6dff817ec66f44342007202690a93763949 (HEAD -> master, origin/master, origin/HEAD)

Author: Scott Chacon <schacon@gmail.com>

Date: 10 years ago

 changed the verison number

刚开始我还没看到变化在哪里,原来只是让作者提交日期改成了多久之前的形式。

--graph  显示 ASCII 图形表示的分支合并历史。


$ git log --graph -1

* commit ca82a6dff817ec66f44342007202690a93763949 (HEAD -> master, origin/master, origin/HEAD)

| Author: Scott Chacon <schacon@gmail.com>

| Date: Mon Mar 17 21:52:11 2008 -0700

|

| changed the verison number

仔细观察是每行的前面添加*|还有\/等ASCII码符号,这个是和后面将要讲到的分支相关的,现在暂时放在这里。

--pretty  使用其他格式显示历史提交信息。可用的选项包括onelineshortfullfullermediumemailrawformat(后跟指定格式)

这个关键字要和后面的可用选项一起使用会有不同的显示方式。例如:


$ git log --pretty=oneline

ca82a6dff817ec66f44342007202690a93763949 (HEAD -> master, origin/master, origin/HEAD) changed the verison number

085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7 removed unnecessary test code

a11bef06a3f659402fe7563abf99ad00de2209e6 first commit

其他的自己可以添加试一试。

单独再拿出来说一下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

定义格式的常用选项如下:
选项 说明

%H  提交对象(commit)的完整哈希字串
%h  提交对象的简短哈希字串
%T  树对象(tree)的完整哈希字串
%t  树对象的简短哈希字串
%P  父对象(parent)的完整哈希字串
%p  父对象的简短哈希字串
%an  作者(author)的名字
%ae  作者的电子邮件地址
%ad  作者修订日期(可以用 --date= 选项定制格式)
%ar  作者修订日期,按多久以前的方式显示
%cn  提交者(committer)的名字
%ce  提交者的电子邮件地址
%cd  提交日期
%cr  提交日期,按多久以前的方式显示
%s  提交说明

其中每一个选项都是英语单词的首字母缩写,所以很好理解。但是中间,有作者和提交者这两个身份的区别。这里官方给出的解释是:其实作者指的是实际作出修改的人,提交者指的是最后将此工作成果提交到仓库的人。 所以,当你为某个项目发布补丁,然后某个核心成员将你的补丁并入项目时,你就是作者,而那个核心成员就是提交者。从我自己的理解来说,其实就不同的人为这个项目贡献源码,这个人就是作者。而提交者是这个项目的管理员,他负责管理每个作者提交的代码,最后合格的额并入最后的项目中。目前我的理解如此,后面学习到Git分布式的时候会有更细微的区别。


另外,当我们的项目记录越来越多的时候,我们需要限制指令的输出长度。如下有很多种限制方式来筛选我们想要看到的记录。

-n  之前已经提到的,仅显示最近的n条信息

例子已有,不再重复。

--since或者--after  仅显示指定时间之后的提交

$ git log --since=2008-5-3
commit ca82a6dff817ec66f44342007202690a93763949 (HEAD -> master, origin/master, origin/HEAD)
Author: Scott Chacon <schacon@gmail.com>
Date:   Mon Mar 17 21:52:11 2008 -0700

    changed the verison number

commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7
Author: Scott Chacon <schacon@gmail.com>
Date:   Sat Mar 15 16:40:33 2008 -0700

    removed unnecessary test code

这里当初有疑惑!感觉很重要。这里我想要输出的是2008年5月3号之后的记录,但是这里显示出来的记录时间为什么是2008年3月15和17日的记录。原来,我才想起来,这里显示的是作者修改的时间信息,而不是提交时间。这里使用:$ git log –pretty=fuller显示详细信息如下:

$ git log --pretty=fuller
commit ca82a6dff817ec66f44342007202690a93763949 (HEAD -> master, origin/master, origin/HEAD)
Author:     Scott Chacon <schacon@gmail.com>
AuthorDate: Mon Mar 17 21:52:11 2008 -0700
Commit:     Scott Chacon <schacon@gmail.com>
CommitDate: Fri Apr 17 21:56:31 2009 -0700

    changed the verison number

commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7
Author:     Scott Chacon <schacon@gmail.com>
AuthorDate: Sat Mar 15 16:40:33 2008 -0700
Commit:     Scott Chacon <schacon@gmail.com>
CommitDate: Fri Apr 17 21:55:53 2009 -0700

    removed unnecessary test code

commit a11bef06a3f659402fe7563abf99ad00de2209e6
Author:     Scott Chacon <schacon@gmail.com>
AuthorDate: Sat Mar 15 10:31:28 2008 -0700
Commit:     Scott Chacon <schacon@gmail.com>
CommitDate: Sat Mar 15 10:31:28 2008 -0700

    first commit

可以看到我们之前打印出来的前两个记录的提交时间都是2009年4月17日。所以打印的结果是正确的。所以这里分清楚作者修改时间和提交者提交时间是很有必要的。

--unitl或者--before  仅显示指定时间之前的提交

和上面的类似

--author  仅显示指定作者相关提交

官方的例子作者和提交者都只有一个人,下面我使用gitignore项目来做演示。

$ git log --pretty=short --author=Brendan -3 --abbrev-commit
commit 967cd64 (HEAD -> master, origin/master, origin/HEAD)
Merge: ca0d1e9 789c4cc
Author: Brendan Forster <brendan@github.com>

    Merge pull request #2762 from EmreAtes/patch-1

commit ca0d1e9
Merge: cd872a9 5cd48ab
Author: Brendan Forster <brendan@github.com>

    Merge pull request #2759 from AndyHee/master

commit cd872a9
Merge: 6cd6c88 b34c1e3
Author: Brendan Forster <brendan@github.com>

    Merge pull request #2738 from jayvdb/patch-artifacts

这里是查看了Brendan Forster这位作者的前三个提交记录。
在填写作者项时,可以使用正则表达式,也可以使用子字符串匹配规则。从而筛选想要的记录,同理,下面的--committer也是一样就不过多赘述。

--committer  仅显示指定提交者相关的提交

--grep  仅显示指定关键字的提交

$ git log --grep=Merlin
commit 14a95b9bcbeee3c9e0b33e42252128d98ee1073e
Author: KINSANG CHING <chengjsh@mail2.sysu.edu.cn>
Date:   Fri Sep 15 12:45:14 2017 +0800

    Update OCaml.gitignore

    Merlin is a code completion for OCaml in Vim and Emacs. Such configuraing file is common

从提交的注释信息来搜索提交信息。这里可以使用正则表达式搜索,但是感觉和正则表达式有区别,不是很理解。可以参照icbm的CSDN博客:git log –grep 搜索提交注释的内容自己进行测试,我有一些没有成功。有问题欢迎在下面评论,帮助我理解。

-S  仅显示添加或者移除了某个关键字的提交

首先使用$ git log -p -10查看到了如下一条修改信息


Author: Shawn Kovalchick <bamapookie@gmail.com>

Date: Mon Jul 2 13:50:02 2018 -0400

 Separate module directory from project iml exclude

**diff --git a/Global/JetBrains.gitignore b/Global/JetBrains.gitignore**

**index 5434492..0d95b08 100644**

**--- a/Global/JetBrains.gitignore**

**+++ b/Global/JetBrains.gitignore**

@@ -26,7 +26,8 @@

 # since they will be recreated, and may cause churn. Uncomment if using

 # auto-import.

 # .idea/modules.xml

-# .idea/**/*.iml

+# .idea/*.iml

+# .idea/modules

 # CMake

 cmake-build-*/

然后找到了添加内容信息# .idea/modules然后使用$ git log -S “# .idea/modules”得到如下结果:


$ git log -S "# .idea/module"

commit bb1c447d54a470c6110a78f6b05d0fbdb56c8fe0

Author: Shawn Kovalchick <bamapookie@gmail.com>

Date: Mon Jul 2 13:50:02 2018 -0400

 Separate module directory from project iml exclude

commit 468a00afc9f8b06dae64a5e290be10034d9b8dcd

Author: Shawn Kovalchick <bamapookie@gmail.com>

Date: Fri Jun 29 08:50:57 2018 -0400

 JetBrains: Optional excludes for auto-import

 Add extra commented section to use when using Gradle or Maven auto-import.

 These are mentioned in the original reference for optional excludes (https://intellij-support.jetbrains.com/hc/en-us/articles/206544839).

 If this would be better as a separate, non-commented ignore file, let me know and I will resubmit.

可以看到得到的第一条结果是我们之前查询到的记录相同,而下面还有更早一些的记录说明这条记录之中也有修改我们输入的查询结果。


$ git log -S "# .idea/module" -p

commit bb1c447d54a470c6110a78f6b05d0fbdb56c8fe0

Author: Shawn Kovalchick <bamapookie@gmail.com>

Date: Mon Jul 2 13:50:02 2018 -0400

 Separate module directory from project iml exclude

**diff --git a/Global/JetBrains.gitignore b/Global/JetBrains.gitignore**

**index 5434492..0d95b08 100644**

**--- a/Global/JetBrains.gitignore**

**+++ b/Global/JetBrains.gitignore**

@@ -26,7 +26,8 @@

 # since they will be recreated, and may cause churn. Uncomment if using

 # auto-import.

 # .idea/modules.xml

-# .idea/**/*.iml

+# .idea/*.iml

+# .idea/modules

 # CMake

 cmake-build-*/

commit 468a00afc9f8b06dae64a5e290be10034d9b8dcd

Author: Shawn Kovalchick <bamapookie@gmail.com>

Date: Fri Jun 29 08:50:57 2018 -0400

 JetBrains: Optional excludes for auto-import

 Add extra commented section to use when using Gradle or Maven auto-import.

 These are mentioned in the original reference for optional excludes (https://intellij-support.jetbrains.com/hc/en-us/articles/206544839).

 If this would be better as a separate, non-commented ignore file, let me know and I will resubmit.

**diff --git a/Global/JetBrains.gitignore b/Global/JetBrains.gitignore**

**index 02d16aa..9cd884a 100644**

**--- a/Global/JetBrains.gitignore**

**+++ b/Global/JetBrains.gitignore**

@@ -21,6 +21,14 @@

 .idea/**/gradle.xml

 .idea/**/libraries

+# Gradle and Maven with auto-import

+# When using Gradle or Maven with auto-import, you should exclude module files,

+# since they will be recreated, and may cause churn. Uncomment if using

+# auto-import.

+# .idea/modules.xml

+# .idea/**/*.iml

+# .idea/libraries/**/*.xml

+

 # CMake

 cmake-build-*/

可以看到最后一个记录中有# .idea/modules.xml的信息,说明确实是根据内容来查找的。

最后,推荐文章Git log高级用法。里面有一些点醒我的地方。

上一篇文章:Git 轻松入门学习笔记(一)
下一篇文章:Git 轻松入门学习笔记(三)

相关文章

  • git 入门

    git 入门学习笔记----3个入门命令:git init、git add、git commit -v 学习场景(...

  • Git 轻松入门学习笔记(二)

    查询 $ git log查看提交记录 官方手册使用了simplegit项目用于演示。 $ git clone ht...

  • Git 轻松入门学习笔记(三)

    撤销操作 $ git commit --amend用于修改上一次的提交信息或者提交上次提交忘记添加提交的文件。只会...

  • Git 轻松入门学习笔记(四)

    开始之前 这篇开始之前请先百度: “GitHub 创建项目” 词条,了解创建一个自己GitHub的云端项目仓库。以...

  • Git 轻松入门学习笔记(一)

    写在前面 写了这么久的代码了,都还不太会版本控制。以前都是知道一点点的凤毛麟角。现在准备花时间好好整理一下版本控制...

  • webpack4入门学习笔记(一)

    系列博客链接 webpack4入门学习笔记(一) webpack4入门学习笔记(二) webpack4入门学习笔记...

  • webpack4入门学习笔记(二)

    系列博客链接 webpack4入门学习笔记(一) webpack4入门学习笔记(二) webpack4入门学习笔记...

  • webpack4入门学习笔记(三)--Babel的使用

    系列博客链接 webpack4入门学习笔记(一) webpack4入门学习笔记(二) webpack4入门学习笔记...

  • Git book

    目录 git community book git入门 git笔记 git 用法 git安装使用手册 git命令大...

  • 策略PM入门学习(十二)

    3.12 策略搜索的延伸 策略产品经理入门学习笔记:策略PM入门学习(一)策略PM入门学习(二)策略PM入门学习(...

网友评论

      本文标题:Git 轻松入门学习笔记(二)

      本文链接:https://www.haomeiwen.com/subject/rhbapftx.html