Git-基础-查看提交历史Git-Basics-Viewing-the-Commit-History

显示提交的统计信息

  1. # 简略文件修改统计信息
  2. $ git log --stat
  3. ## 其余提交信息省略,不再这里显示
  4. src/components/containers/LeadCockpit/LeadCockpit.js | 20 ++++++++++++++------
  5. 1 file changed, 14 insertions(+), 6 deletions(-)
  6. # 只显示文件的数量信息
  7. $ git log --shortstat
  8. 1 file changed, 14 insertions(+), 6 deletions(-)
  9. # 仅在提交信息后显示修改的文件名
  10. ## --name-only
  11. $ git log --name-only
  12. fc8d7104 (HEAD -> dev) feat(LeadCockpit): 获取年份数据接口添加交互效果
  13. src/components/containers/LeadCockpit/LeadCockpit.js
  14. # 显示文件名以及文件的修改状态;如添加、删除、修改
  15. $ git log --name-status
  16. fc8d7104 (HEAD -> dev) feat(LeadCockpit): 获取年份数据接口添加交互效果
  17. M src/components/containers/LeadCockpit/LeadCockpit.js

筛选 Commit 历史

Git 官网:Commit-limiting

其他筛选:数量、作者、是否 merge、commit 信息

  1. # -<n> 按数量
  2. ## 显示最近的 5 条信息
  3. $ git log -5
  4. # pattern
  5. ## --author=<pattern>: 输出指定用户的提交,接受正则表达式
  6. ## --committer=<pattern>
  7. $ git log --author="Name"
  8. $ git log --author="John\|Mary" 或者 "John|Mary"
  9. # merge 信息
  10. $ git log --no-merges
  11. $ git log --merges
  12. # 按 commit 描述信息
  13. ## -i 忽略大小写
  14. git log --grep="msg"

按时间段筛选

  1. # 按日期
  2. ## --after(--since) 当前日期及之后的 Commit
  3. ## 时间完整的格式是 "2020-7-1 00:24",时间字符串中缺省的时间段默认是当前时间,包含时分秒
  4. ### 相对时间或绝对时间都是距此时此刻计算的
  5. ### 如 7-1 00:00 代表 2020-07-01 00:00
  6. $ git log --after="2020-7-1"
  7. ## --before(--until) 当前日期之前

日期规则

  • 时间完整的格式是 2020-7-1 00:24。时间字符串中缺省的时间段默认是当前时间(年月日 时分秒)
  • 相对时间或绝对时间都是距此时此刻计算的, 如现在是 2021-08-13 09:41
    • 使用 --after="1 day ago" === --after="2021-08-12 09:41"
    • 使用 --after="7-1" === --after="2021-07-01 09:41"
  • 时分秒,最好精确到时分,否则可能不准确(原因还没摸清楚)

其他的日期格式还有

  • today
  • yesterday
  • 10 (day|week|month) ago

按文件筛选

筛选出所有指定文件变化的提交。

  1. # 按文件: 可以指定多个文件
  2. $ git log -- foo.py foo1.py
  3. # 按文件夹
  4. ## foo 文件夹下
  5. $ git log -- foo/

按文件内容筛选

你可能需要知道某个字符串是什么时候被添加到提交历史中的。
默认是区分大小写。可以通过 -i 忽略大小写。

  1. # 按提交文件中的内容
  2. ## -S<string>
  3. ## -G<regex> 使用正则匹配
  4. $ git log -S "Hello,Word"

官方:Git-log-S

VsCode GitLens 插件:在 SourceControl 中底部 SEARCH & COMPARE
+ -> Search Commits... -> Search by Changes change: patteren or -:pattern
TODO: 搜索出的结果与 git log -S/-G 数量不一样,待查
image.png

特定场景示例

查看 Junio Hamano 在 2008 年 10 月间,除了合并提交之外的哪一个提交修改了测试文件:

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

自定义 log 的输出格式

  1. $ git log --pretty=format:"参数"
  2. $ git log --oneline --format="作者-%an ; 提交-%cn"
  1. $ git log --pretty=format:"%Cred%an - %ar%n %Cblue %h -%Cgreen %s %n"

image.png
Git 操作详解

常见的 format 的参数有

  1. #选项 #说明
  2. %n 新行
  3. %% 原始的百分号
  4. %H 提交对象(commit)的完整哈希字串
  5. %h 提交对象的简短哈希字串
  6. %T 树对象(tree)的完整哈希字串
  7. %t 树对象的简短哈希字串
  8. %P 父对象(parent)的完整哈希字串
  9. %p 父对象的简短哈希字串
  10. %an 作者(author)的名字
  11. %ae 作者的电子邮件地址
  12. # date format 格式(除了%z 和 %Z),是由系统的 strftime 处理的
  13. %ad 作者修订日期(可以用 -date= 选项定制格式)
  14. %ar 作者修订日期,按多久以前的方式显示
  15. %cn 提交者(committer)的名字
  16. %ce 提交者的电子邮件地址
  17. %cd 提交日期
  18. %cr 提交日期,按多久以前的方式显示
  19. %s 提交说明
  20. %d ref 名称,就像 git log --decorate 参数
  21. %D ref 名称不带括号,只是用逗号分隔

作者(Author、修订者)和提交者(Committer)的关系:

  • 作者是程序的修改者,提交者是将工作成果提交进仓库的人
  • 正常情况(git commit)下作者和提交者是一个人
  • 当执行发布补丁、cherry-pick、rebase 等操作时,提交者就变成执行当前操作的人

image.png

生成 ChangeLog 日志

待测试
https://www.cnblogs.com/linkstar/p/10274943.html
https://libery.cn/2019/11/18/git-commit-message-generate-changelog/
https://juejin.im/post/6844904147892830221

资料

官方文档:git log
https://www.yiibai.com/git/git_log.html
博客:https://www.cnblogs.com/bellkosmos/p/5923439.html