Git-叹为观止的 log 命令 其参数

2024-01-31 04:50

本文主要是介绍Git-叹为观止的 log 命令 其参数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


title: Git-叹为观止的 log 命令 & 其参数
date: 2018-03-18 12:12:01
tags:

如果你欺负了 log 命令,如果它叫上它的参数过来,然后别硬撑了,直接投降吧,会出人命的给你讲。

写在前面

之前 Git 系列博客中,多次用到 git log 去查看分支历史,很多人以为它只有这个用法,事实并非如此,git log 只是最基础的用法。

官方文档上对它的描述是:

git log的本质是展示提交信息。

但是该命令配合一些参数,可以如同 git rev-list 一样控制输出哪些提交和提交的显示方式,也可以如同 git diff-* 一样决定怎样显示每个提交的修改内容。

是不是非常惊讶了?另外 git rev-list这个命令是什么鬼?我至今未用过,先当作黑盒不管它了。由此可见,关于 git log 这个命令我们真的应该重新认识一下它。

log 这参数啊,真是的是太丰富了。

毫不夸张的说,log 的功能这么牛气,不是没道理的,就这庞大的参数量,不是一般命令能有的。

至于有多少,娃子们可以去 git-log 官方文档 去看下,太多了,我真的截不出来它们的风采。

官方君也知道太多了,也是非常贴心地按功能给分好了类:

  • Commit Limiting(过滤提交的)

    提交太多了,不好找,就需要用一些特别的参数帮忙限制一下输出。例如只想找昨天的,只想找小明的,只想修改过A.txt 文件的等等各种只想,只要你敢想,基本都能实现。

  • History Simplification (简化提交历史的)

    提交历史是默认显示全部的,如果你感觉没看到全部,不是人没给你,是你的命令行窗口太小了,需要往下翻翻页。如果你只想看某一部分的历史,可以用这一部分的命令。

  • Commit Ordering (修改默认提交排序的)

    提交历史默认是按时间先后顺序排列的,最新的放在最上面。如果有其他排列需求,或者单纯看不惯,可以用这一部分的参数,去改。

  • Commit Formatting (修改默认提交显示格式的)

    每个提交默认的显示信息,就是我们经常看到,有 SHA1 值,提交信息,作者和时间。但是呢,有些人想减去一点,有些人想多一点,有些人想换个显示方式,也是这些参数就诞生了。

  • Diff Formatting(控制提交显示文件的差异格式的)

    diff 命令我们之前用过,会显示出修改的具体内容,也就是文件的差异,例如 --- com/A.txt +++ com/A.txt 。这个类别的命令,就是用来控制提交中显示此类差异的格式的。

看完这些分类的介绍,开心吗?

我是心情很复杂,参数太多,我都有点不太想去学了,看到后面前面的都忘了。于是,这里给大家推荐几个日常工作中比较常用的,提交过滤和提交历史格式化。

Commit Limiting 用来搜索提交再不过了

Search-作者

这个命令支持的搜索参数为提交的创建者和提交者,而且是支持正则表达式的,可以发挥的余地很多。

//命令格式
git log  --author=<pattern>
git log --committer=<pattern>//示例
git log --author=“小明”
git log --author=“小明\|小红”

示例项目就我一个作者,没法试,但是我用公司项目试过,的确可以。

Search-时间

关于按时间搜索,支持的有很多类型,如下:

//某个日期之后
git log --since=<date>
git log --after=<date>//某个日期之前
git log --until=<date>
git log --before=<date>

如果你想要一个具体的时间区间的,可以把这个参数组合起来的,例如下面的命令:

//查出 03.12-03.18 期间的提交
git log --since="2018.03.12" --until="2018.03.18"

Search-提交信息

这个就厉害了,你可以搜索提交信息,也支持正表达式

git log --grep=<pattern>//示例
git log --grep='喜欢' --oneline

Search-修改内容

一般情况下,我们想找一个提交,大多是为了某个修改去找,这个修改对应要么是具体的文件,要么是具体的修改的内容。放心,这个条件也支持。

文件

//文件
git log [\--] <path>…​//示例
git log --oneline -- 11.txt

修改内容

这一部分其实是 Diff 的参数部分,有很多参数,这里列出两个。

//查看某个字符串的变动历史提交
git log -S<string>
//查看某符合某一个正则表达式内容的变动历史提交  
git log -G<regex>//例子
git log -S"喜欢你" --oneine

Search-合并相关的提交 & 文件

工作中,分支之间的合并,往往不是 fast-forword,而是 recursive strategy merge 策略式合并,所以会在历史中出现很多合并提交。运用下面的命令,你可以选择只看合并提交,或者非合并提交。

//查看合并提交
git log --merges//查看非合并提交
git log --no-merges

不幸发生了合并冲突,还可以用这个命令,可以快速找到冲突的文件。

//查看发生合并冲突的文件
git log --merge

Commit History Formatting 你想要什么格式的你说

默认版

这个我们最常用的,显示 commit 的 SHA1 值,创建作者和时间,提交信息。

git log

git log

一行情书版

使用 --oneline 参数,only one line !只显示提交的 SHA1 值和提交信息,SHA1 还是缩短显示前几位。

这个命令,在你要根据信息去找提交的时候,比 git log 的效率要高点。

git log --oneline

git log --oneline

毫发毕现版

这个版本,就是上面说的,做到加持 git diff-*的效果版本,最常使用的参数是 --stat 和 -p。

git log --stat

git log  -- stat

git log -p

git log -p

角色版

这个按提交的创建者分类,因为目前只有我一个操作,就显示了我一个人的。

使用这个命令可以容易地看到谁做了什么,毫无保留的。

git shortlog

git shortlog

图文并茂版

这次命令使用三个参数 --oneline, --decorate 和 --graph 。
–oneline 刚才就是哪个一句话情书的。
–graph 选项会绘制一个 ASCII 图像来展示提交历史的分支结构。
–decorate 是用来可以显示出指向提交的指针的名字,也就是 HEAD 指针, feature/test等分支名称,还有远程分支,标签等。

git log --graph --oneline --decorate

git log --graph --oneline --decorate

最强推荐版

这个是在 stormZhang 张哥那里学来的:

git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --date=relative

效果比较炫酷,这个已经属于自定义格式了,git log 支持自定义样式的,有兴趣的娃子可以自己研究下。而且这个命令比较长,娃子们可以通过给这个命令设置别名解决:

git config --global alias.lg "log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --date=relative"

这样以后直接输入 git lg 就行了。

写在后面

这篇博客满足不了您的需求的同学们,自行去官方文档上看,这里再贴一下伟大的官方文档连接:git-log 官方文档连接在此,您请去吧!

最后,see you next blog 。

欢迎订阅我的Git系列文章

  • 01. 请回答:Git是什么?
  • 02. Git常用命令一日游活动
  • 03. Git三大特色之Branch(分支)
  • 04. Git三大特色之Stage(暂存区)
  • 05. Git三大特色之WorkFlow(工作流)
  • 06. Git-你好, HEAD 同学
  • 07. Git-用 cherry-pick 挑好看的小樱桃
  • 08. Git-rebase 黑魔法之打造完美的线性历史
  • 09. Git-rebase 黑魔法之打磨 commit 颗粒度
  • 10. Git-少年,你想学回滚吗?想撤销文件修改吗?
  • 11. Git-移动记录仪 & 贴心小棉袄 reflog
  • 12. Git-丢失的 commit 是真的消失了吗?
  • 13. Git-叹为观止的 log 命令 & 其参数
  • 14. Git-送娃子们一本关于如何自学 Git 的秘籍

欢迎关注个人微信公众号「浅浅同学的开发笔记」,最新的博客,好玩的事情,都会在上面分享,期待与你共同成长。

在这里插入图片描述

这篇关于Git-叹为观止的 log 命令 其参数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/662612

相关文章

Redis 的 SUBSCRIBE命令详解

《Redis的SUBSCRIBE命令详解》Redis的SUBSCRIBE命令用于订阅一个或多个频道,以便接收发送到这些频道的消息,本文给大家介绍Redis的SUBSCRIBE命令,感兴趣的朋友跟随... 目录基本语法工作原理示例消息格式相关命令python 示例Redis 的 SUBSCRIBE 命令用于订

防止Linux rm命令误操作的多场景防护方案与实践

《防止Linuxrm命令误操作的多场景防护方案与实践》在Linux系统中,rm命令是删除文件和目录的高效工具,但一旦误操作,如执行rm-rf/或rm-rf/*,极易导致系统数据灾难,本文针对不同场景... 目录引言理解 rm 命令及误操作风险rm 命令基础常见误操作案例防护方案使用 rm编程 别名及安全删除

Java使用jar命令配置服务器端口的完整指南

《Java使用jar命令配置服务器端口的完整指南》本文将详细介绍如何使用java-jar命令启动应用,并重点讲解如何配置服务器端口,同时提供一个实用的Web工具来简化这一过程,希望对大家有所帮助... 目录1. Java Jar文件简介1.1 什么是Jar文件1.2 创建可执行Jar文件2. 使用java

SpringBoot 获取请求参数的常用注解及用法

《SpringBoot获取请求参数的常用注解及用法》SpringBoot通过@RequestParam、@PathVariable等注解支持从HTTP请求中获取参数,涵盖查询、路径、请求体、头、C... 目录SpringBoot 提供了多种注解来方便地从 HTTP 请求中获取参数以下是主要的注解及其用法:1

HTTP 与 SpringBoot 参数提交与接收协议方式

《HTTP与SpringBoot参数提交与接收协议方式》HTTP参数提交方式包括URL查询、表单、JSON/XML、路径变量、头部、Cookie、GraphQL、WebSocket和SSE,依据... 目录HTTP 协议支持多种参数提交方式,主要取决于请求方法(Method)和内容类型(Content-Ty

python中的显式声明类型参数使用方式

《python中的显式声明类型参数使用方式》文章探讨了Python3.10+版本中类型注解的使用,指出FastAPI官方示例强调显式声明参数类型,通过|操作符替代Union/Optional,可提升代... 目录背景python函数显式声明的类型汇总基本类型集合类型Optional and Union(py

Go语言使用Gin处理路由参数和查询参数

《Go语言使用Gin处理路由参数和查询参数》在WebAPI开发中,处理路由参数(PathParameter)和查询参数(QueryParameter)是非常常见的需求,下面我们就来看看Go语言... 目录一、路由参数 vs 查询参数二、Gin 获取路由参数和查询参数三、示例代码四、运行与测试1. 测试编程路

Linux查询服务器 IP 地址的命令详解

《Linux查询服务器IP地址的命令详解》在服务器管理和网络运维中,快速准确地获取服务器的IP地址是一项基本但至关重要的技能,下面我们来看看Linux中查询服务器IP的相关命令使用吧... 目录一、hostname 命令:简单高效的 IP 查询工具命令详解实际应用技巧注意事项二、ip 命令:新一代网络配置全

Linux grep 命令的使用指南

《Linuxgrep命令的使用指南》本文给大家介绍Linuxgrep命令的使用指南,包括基础搜索语法、实践指南,感兴趣的朋友跟随小编一起看看吧... 目录linux grep 命令全面使用指南一、基础搜索语法1. 基本文本搜索2. 多文件搜索二、常用选项详解1. 输出控制选项2. 上下文控制选项三、正则表达

Python lambda函数(匿名函数)、参数类型与递归全解析

《Pythonlambda函数(匿名函数)、参数类型与递归全解析》本文详解Python中lambda匿名函数、灵活参数类型和递归函数三大进阶特性,分别介绍其定义、应用场景及注意事项,助力编写简洁高效... 目录一、lambda 匿名函数:简洁的单行函数1. lambda 的定义与基本用法2. lambda