1、查看提交历史

  • 在提交了若干更新,又或者克隆了某个项目之后,你也许想回顾下提交历史。完成这个任务最简单而又有效的工具是 git log 命令。

    1. $ git log
    1. commit ca82a6dff817ec66f44342007202690a93763949
    2. Author: Scott Chacon <schacon@gee-mail.com>
    3. Date: Mon Mar 17 21:52:11 2008 -0700
    4. changed the version number
    5. commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7
    6. Author: Scott Chacon <schacon@gee-mail.com>
    7. Date: Sat Mar 15 16:40:33 2008 -0700
    8. removed unnecessary test
    9. commit a11bef06a3f659402fe7563abf99ad00de2209e6
    10. Author: Scott Chacon <schacon@gee-mail.com>
    11. Date: Sat Mar 15 10:31:28 2008 -0700
    12. first commit
  • 默认不用任何参数的话,git log 会按提交时间列出所有的更新,最近的更新排在最上面。正如你所看到的,这个命令会列出每个提交的 SHA-1 校验和、作者的名字和电子邮件地址、提交时间以及提交说明。

2、查看特定的提交历史

2.1 定制输出格式

  • git log 的常用选项列出了我们目前涉及到的和没涉及到的选项,以及它们是如何影响 log 命令的输出的。

    1. 选项 | 说明
    2. ------------------|-------------------------------------------
    3. -p | 按补丁格式显示每个更新之间的差异
    4. --stat | 显示每次更新的文件修改统计信息
    5. --shortstat | 只显示 --stat 中最后的行数修改添加移除统计
    6. --name-only | 仅在提交信息后显示已修改的文件清单
    7. --name-status | 显示新增、修改、删除的文件清单
    8. --abbrev-commit | 仅显示 SHA-1 的前几个字符,而非所有的 40 个字符
    9. --relative-date | 使用较短的相对时间显示(比如,“2 weeks ago”)
    10. --graph | 显示 ASCII 图形表示的分支合并历史
    11. --pretty | 使用其他格式显示历史提交信息
    • 1)一个常用的选项是 -p,用来显示每次提交的内容差异。该选项除了显示基本信息之外,还附带了每次 commit 的变化。

      1. $ git log -p -2
      1. commit ca82a6dff817ec66f44342007202690a93763949
      2. Author: Scott Chacon <schacon@gee-mail.com>
      3. Date: Mon Mar 17 21:52:11 2008 -0700
      4. changed the version number
      5. diff --git a/Rakefile b/Rakefile
      6. index a874b73..8f94139 100644
      7. --- a/Rakefile
      8. +++ b/Rakefile
      9. @@ -5,7 +5,7 @@ require 'rake/gempackagetask'
      10. spec = Gem::Specification.new do |s|
      11. s.platform = Gem::Platform::RUBY
      12. s.name = "simplegit"
      13. - s.version = "0.1.0"
      14. + s.version = "0.1.1"
      15. s.author = "Scott Chacon"
      16. s.email = "schacon@gee-mail.com"
      17. s.summary = "A simple gem for using Git in Ruby code."
      18. commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7
      19. Author: Scott Chacon <schacon@gee-mail.com>
      20. Date: Sat Mar 15 16:40:33 2008 -0700
      21. removed unnecessary test
      22. diff --git a/lib/simplegit.rb b/lib/simplegit.rb
      23. index a0a60ae..47c6340 100644
      24. --- a/lib/simplegit.rb
      25. +++ b/lib/simplegit.rb
      26. @@ -18,8 +18,3 @@ class SimpleGit
      27. end
      28. end
      29. -
      30. -if $0 == __FILE__
      31. - git = SimpleGit.new
      32. - puts git.show
      33. -end
      34. \ No newline at end of file
    • 2)你想看到每次提交的简略的统计信息,你可以使用 --stat 选项。在每次提交的下面列出所有被修改过的文件、有多少文件被修改了以及被修改过的文件的哪些行被移除或是添加了。在每次提交的最后还有一个总结。

      1. $ git log --stat
      1. commit ca82a6dff817ec66f44342007202690a93763949
      2. Author: Scott Chacon <schacon@gee-mail.com>
      3. Date: Mon Mar 17 21:52:11 2008 -0700
      4. changed the version number
      5. Rakefile | 2 +-
      6. 1 file changed, 1 insertion(+), 1 deletion(-)
      7. commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7
      8. Author: Scott Chacon <schacon@gee-mail.com>
      9. Date: Sat Mar 15 16:40:33 2008 -0700
      10. removed unnecessary test
      11. lib/simplegit.rb | 5 -----
      12. 1 file changed, 5 deletions(-)
      13. commit a11bef06a3f659402fe7563abf99ad00de2209e6
      14. Author: Scott Chacon <schacon@gee-mail.com>
      15. Date: Sat Mar 15 10:31:28 2008 -0700
      16. first commit
      17. README | 6 ++++++
      18. Rakefile | 23 +++++++++++++++++++++++
      19. lib/simplegit.rb | 25 +++++++++++++++++++++++++
      20. 3 files changed, 54 insertions(+)
    • 3)另外一个常用的选项是 --pretty。这个选项可以指定使用不同于默认格式的方式展示提交历史。这个选项有一些内建的子选项供你使用。比如用 oneline 将每个提交放在一行显示,查看的提交数很大时非常有用。另外还有 short,full 和 fuller 可以用,展示的信息或多或少有些不同。

      1. $ git log --pretty=oneline
      1. ca82a6dff817ec66f44342007202690a93763949 changed the version number
      2. 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7 removed unnecessary test
      3. a11bef06a3f659402fe7563abf99ad00de2209e6 first commit
      • 但最有意思的是 format,可以定制要显示的记录格式。 这样的输出对后期提取分析格外有用

        1. $ git log --pretty=format:"%h - %an, %ar : %s"
        1. ca82a6d - Scott Chacon, 6 years ago : changed the version number
        2. 085bb3b - Scott Chacon, 6 years ago : removed unnecessary test
        3. a11bef0 - Scott Chacon, 6 years ago : first commit
      • git log --pretty=format 常用的选项列出了常用的格式占位符写法及其代表的意义。

        1. 选项 | 说明
        2. ------|-------------------------------------
        3. %H | 提交对象(commit)的完整哈希字串
        4. %h | 提交对象的简短哈希字串
        5. %T | 树对象(tree)的完整哈希字串
        6. %t | 树对象的简短哈希字串
        7. %P | 父对象(parent)的完整哈希字串
        8. %p | 父对象的简短哈希字串
        9. %an | 作者(author)的名字
        10. %ae | 作者的电子邮件地址
        11. %ad | 作者修订日期(可以用 --date= 选项定制格式)
        12. %ar | 作者修订日期,按多久以前的方式显示
        13. %cn | 提交者(committer)的名字
        14. %ce | 提交者的电子邮件地址
        15. %cd | 提交日期
        16. %cr | 提交日期,按多久以前的方式显示
        17. %s | 提交说明
      • 当 oneline 或 format 与另一个 log 选项 --graph 结合使用时尤其有用。这个选项添加了一些 ASCII 字符串来形象地展示你的分支、合并历史。

        1. $ git log --pretty=format:"%h %s" --graph
        1. * 2d3acf9 ignore errors from SIGCHLD on trap
        2. * 5e3ee11 Merge branch 'master' of git://github.com/dustin/grit
        3. |\
        4. | * 420eac9 Added a method for getting the current branch.
        5. * | 30e367c timeout code and tests
        6. * | 5a09431 add timeout protection to grit
        7. * | e1193f8 support for heads with slashes in them
        8. |/
        9. * d6016bc require time for xmlschema
        10. * 11d191e Merge branch 'defunkt' into local

2.2 限制输出长度

  • 除了定制输出格式的选项之外,git log 还有许多非常实用的限制输出长度的选项,也就是只输出部分提交信息。

    1. 选项 | 说明
    2. --------------------|-----------------------------
    3. -(n) | 仅显示最近的 n 条提交
    4. --since, --after | 仅显示指定时间之后的提交。
    5. --until, --before | 仅显示指定时间之前的提交。
    6. --author | 仅显示指定作者相关的提交。
    7. --committer | 仅显示指定提交者相关的提交。
    8. --grep | 仅显示含指定关键字的提交
    9. -S | 仅显示添加或移除了某个关键字的提交
    • 1)之前你已经看到过 -2 了,它只显示最近的两条提交, 实际上,这是 -<n> 写法,其中的 n 可以是任何整数,表示仅显示最近的若干条提交。不过实践中我们是不太用这个选项的,Git 在输出所有提交时会自动调用分页程序,所以你一次只会看到一页的内容。

    • 2)另外还有按照时间作限制的选项,比如 --since--until 也很有用。这个命令可以在多种格式下工作,比如说具体的某一天 "2008-01-15",或者是相对地多久以前 "2 years 1 day 3 minutes ago"。

      1. $ git log --since=2.weeks
    • 3)还可以给出若干搜索条件,列出符合的提交。用 --author 选项显示指定作者的提交,用 --grep 选项搜索提交说明中的关键字。(请注意,如果要得到同时满足这两个选项搜索条件的提交,就必须用 --all-match 选项。否则,满足任意一个条件的提交都会被匹配出来)。

    • 4)另一个非常有用的筛选选项是 -S,可以列出那些添加或移除了某些字符串的提交。比如说,你想找出添加或移除了某一个特定函数的引用的提交,你可以这样使用。

      1. $ git log -Sfunction_name
    • 5)最后一个很实用的 git log 选项是路径(path),如果只关心某些文件或者目录的历史提交,可以在 git log 选项的最后指定它们的路径。因为是放在最后位置上的选项,所以用两个短划线(--)隔开之前的选项和后面限定的路径名。

      • 来看一个实际的例子,如果要查看 Git 仓库中,2008 年 10 月期间,Junio Hamano 提交的但未合并的测试文件,可以用下面的查询命令。

        1. $ git log --pretty="%h - %s" --author=gitster --since="2008-10-01" \
        2. --before="2008-11-01" --no-merges -- t/
        1. 5610e3b - Fix testcase failure when extended attributes are in use
        2. acd3b9e - Enhance hold_lock_file_for_{update,append}() API
        3. f563754 - demonstrate breakage of detached checkout with symbolic link HEAD
        4. d1a43f2 - reset --hard/read-tree --reset -u: remove unmerged new paths
        5. 51a94af - Fix "checkout --track -b newbranch" on detached HEAD
        6. b0ad11e - pull: allow "git pull origin $something:$current_branch" into an unborn branch

Git 查看提交历史(分布式版本控制系统)的更多相关文章

  1. Git-Runoob:Git 查看提交历史

    ylbtech-Git-Runoob:Git 查看提交历史 1.返回顶部 1. Git 查看提交历史 在使用 Git 提交了若干更新之后,又或者克隆了某个项目,想回顾下提交历史,我们可以使用 git ...

  2. 【第八篇】- Git 查看提交历史之Spring Cloud直播商城 b2b2c电子商务技术总结

    ​ Git 查看提交历史 Git 提交历史一般常用两个命令: git log 在使用 Git 提交了若干更新之后,又或者克隆了某个项目,想回顾下提交历史,我们可以使用 git log 命令查看. 针对 ...

  3. git 查看提交历史

    查看提交历史 git log 查看每次提交的具体改动内容 git log -p 查看某个文件历次提交的具体改动内容 git log -p <file name> # git log -p ...

  4. git查看提交历史

    git日志的查看 在使用 Git 提交了若干更新之后,又或者克隆了某个项目,想回顾下提交历史,我们可以使用 git log 命令查看. 查看日志信息: $ git log 可以用 --oneline ...

  5. Git 打标签(分布式版本控制系统)

    前言 像其他版本控制系统(VCS)一样,Git 可以给历史中的某一个提交打上标签,以示重要.比较有代表性的是人们会使用这个功能来标记发布结点(v1.0 等等). 1.列出标签 在 Git 中列出已有的 ...

  6. Git 获取仓库(分布式版本控制系统)

    1.在现有目录中初始化仓库 如果你打算使用 Git 来对现有的项目进行管理,你只需要进入该项目目录并输入以下命令. # 初始化仓库 $ git init 该命令将创建一个名为 .git 的子目录,这个 ...

  7. Git 远程仓库(分布式版本控制系统)

    前言 远程仓库是指托管在因特网或其他网络中的你的项目的版本库.你可以有好几个远程仓库,通常有些仓库对你只读,有些则可以读写. 1.查看远程仓库 如果想查看你已经配置的远程仓库服务器,可以运行 git ...

  8. Git 撤消操作(分布式版本控制系统)

    1.覆盖提交 有时候我们提交完了才发现漏掉了几个文件没有添加,或者提交信息写错了.此时,可以运行带有 --amend 选项的提交命令尝试重新提交. $ git commit --amend 或 # g ...

  9. GIT 分布式版本控制系统的简单使用介绍

    GIT 分布式版本控制系统的简单使用介绍 1.GIT的概念Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目. Git 与 SVN 区别:1. GIT不仅仅是个版本控制系统,它 ...

随机推荐

  1. (算法)从0到n整数中数字2出现的次数

    题目: 数出0到n(含)中数字2出现了几次. 思路: 1.暴力方法,数出每个数字包含几个2,然后累加起来. 2.分析:分别考虑数字n每一位出现2的次数,如123123: 从左往右考虑4123123: ...

  2. linux mount

    挂载       mount //10.65.200.168/linux_bj /home/linux_bj -t cifs -o username=niu,password=ruanxiaopang ...

  3. 25个Web前端开发工程师必看的国外大牛和酷站

    逛了一周国外大牛们的博客与酷站,真是满满的钦佩.震撼.羡慕.惊喜………… Web设计是一个不断变化的领域,因此掌握最新的发展趋势及技术动向对设计师来说非常重要.无论是学习新技术,还是寻找免费资源与工具 ...

  4. Web UI 技术发展历程

    本文内容 纯文本和静态 HTML 页面 服务器端技术 插件技术--ActiveX.Applet 和 Flash Ajax 异步时代和基于 JavaScript 的 UI 技术 RIA--Adobe F ...

  5. 【Linux】好玩的Linux命令(二)

    关于Linux talk:http://man.linuxde.net/talk 下面文章转自:http://www.oschina.net/translate/11-lesser-known-use ...

  6. 树莓派中GPIO针角定义图

    一.上图 二.上图

  7. C++ 第八课 标准c字符和字符串

    atof() 将字符串转换成浮点数 atoi() 将字符串转换成整数 atol() 将字符串转换成长整型数 isalnum() 当字母或数字字符时, 返回真值 isalpha() 当字母字符时, 返回 ...

  8. python PDF报表服务

    先看牛逼的草图 知乎上刚看到类似的需求 Python Web导出有排版要求的PDF文件 关键技术

  9. error: expected unqualified-id extern "C" {

    通常为include该文件的头文件内类的声明处未加“:”

  10. static_cast<void>(0)的意义及NDEBUG assert的使用

    查看ace代码时发现如下代码 #define ACE_TEST_ASSERT(X) \ ((X) \ ? static_cast<) \ : ACE_VERSIONED_NAMESPACE_NA ...