DevOps系列文章之 Git命令:过滤日志

使用git log命令查找特定提交历史的高级技巧。其中的一些技巧配合格式化日志命令使用有奇效。

按照数量过滤

使用git log命令时最基本的过滤方式就是按照可以显示的日志条数进行过滤。如果你只对最近几次提交感兴趣,这会节省在页面上查看所有提交的麻烦。

git log -3

按照日期过滤

如果你想查找特定时间段的提交历史,可以使用--after或者--before选项来通过日期过滤显示内容。这两个选项的值都可以接收不同形式的日期格式。比如下面的命令只显示2014年7月1日以及之后的提交历史信息。

git log --after="2014-7-1"

也可以传递相对时间比如"1 week ago"表示一周前或者"yesterday"表示昨天:

 git log --after="yesterday"

如果想寻找时间区间内的提交历史,可以同时使用--before--after选项。比如为了显示2014年7月1日到2014年7月4日之间提交可以向下面这样执行命令:

git log --after="2014-7-1" --before="2014-7-4"

此外需了解的是,git log命令中还可以使用--since--until选项,他们分别是--after--before的同义词。

按照作者过滤

如果想查找某个特定作者的提交历史,可以使用--author选项。该选项接受一个正则表达式,并且返回所有作者字段符合正则表达式的提交记录。当然如果你知道作者确切的名称,也可以直接传入一个普通字符串而无需使用正则表达式:

git log --author="John"

这条命令会显示所有由John提交的记录。作者名称并不是必须完全一致,检索时会匹配包含给定参数的提交记录。

你也可以通过使用正则表达式来构建更加复杂的搜索方式。比如下面的例子就会去搜索Mary或者John提交的记录。

git log --author="John\|Mary"

请注意在作者字段中也包含提交者的email值,所以你也可以使用此选项来搜索特定email地址。

如果你的工作流程区分提交人和作者,那么--committer选项操作也类似。

按照提交信息过滤

如果想按照提交信息过滤提交记录,可以使用--grep选项。它的工作方式与--author选项一致,只不过搜索的目标是提交信息而不是作者信息。

比如说你的团队规定提交信息中要包含对应的issue信息,那么就可以使用类似下面的命令来根据issue信息查找特定提交:

git log --grep="JRA-224:"

在使用时可以考虑传递-i选项让git log查找提交记录时忽略大小写。

按照文件过滤

很多时候,你可能只关心含有特定文件变更的提交。要想显示所有与这个文件相关的提交记录,那么可以将文件路径作为参数传递给git log命令。比如下面的例子会返回所有与foo.pybar.py文件有关的提交记录。

git log -- foo.py bar.py

--参数告诉git log命令接下来要传递的参数是文件路径而不是分支名称。如果你确定文件路径不会与分支名称混淆,也可以省略--

按照提交内容过滤

想要按照提交的具体内容来过滤提交记录,也是可以办到的。比如有时候你想知道添加或者删除某行代码的提交,可以使用-S""这样的参数,这被叫做pickaxe。比如如果你想知道Hello, World!这行代码是什么时候被添加到项目里的,那么就可以执行下面的命令:

git log -S"Hello, World!"

如果想以正则表达式进行搜索,而不是通过字符串,那么可以修改一下上面的命令,改为传入-G""这样的参数。

由于它提供了定位特定代码涉及到的所有提交记录的能力,这对于调试问题可能非常有用。这个命令甚至可以告诉你某行代码是什么时候被复制或者移动到另外一个文件的。

按照提交区间过滤

你可以向git log命令传递一个表示提交之间的区间来筛选仅在这两次提交之间的所有提交记录。对于区间的表示如下所示:

git log ..

这个命令对于查找两个分支之间的区别非常有用。考虑下面这个命令:

 git log main..feature

main..feature这个提交区间的表述,会给出所有已经存在于feature分支但还不存在于main分支的提交记录。换句话说,也就是feature分支已经距离main分支有多远了。可以通过下图来理解:

请注意如果你对调区间的两端(feature..main),你会得到所有已经存在于main分支但还未存在于feature分支的提交记录。如果git log命令在执行这两个区间时都有返回,那么也就意味着你的提交历史已经分叉了。

过滤合并提交

git log命令默认会含有合并提交。但是如果你的团队策略是“总是使用合并”(比如说总是在功能分支使用merge来整合上游分支的新变更,而不是将功能分支rebase到上游分支上),那么项目提交历史中会有大量冗余的合并提交节点。

通过传入--no-merges选项,可以让git log命令的输出过滤掉那些合并提交:

git log --no-merges

另外一方面,如果你只对合并提交感兴趣,也可以使用--merge选项

git log --merges

这会输出所有含有两个及以上分支的提交记录。

总结

这些新技能是Git工具包中的重要组成部分,git log命令经常与其他Git命令关联使用。一旦找到你所关心的那次提交,通常来说你都会需要使用git checkoutgit revert或者其他什么命令来操作这次提交。所以,还需持续不断的学习Git的高级功能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/363641.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

成熟的汽车制造供应商协同平台 要具备哪些功能特性?

汽车行业是一个产业链长且“重”的行业,整个业务流程包括了研发、设计、采购、库存、生产、销售、售后等一系列环节,在每一个环节都涉及到很多信息交换的需求。对内要保证研发、采购、营销等业务环节信息流通高效安全,对外要与上、下游合作伙…

springboot-前后端分离——第一篇

本篇主要对前后端分离的一些基础知识进行总结,主要对HTTP请求协议、HTTP响应格式、Http协议解析等进行总结。重点在于简单了解前端如何向服务端发送请求,服务端如何接收请求并返回响应结果。 一、简单案例: 首先创建一个springboot项目&…

使用pygame建立一个简单的使用键盘方向键移动的方块小游戏

import pygame import sys# 初始化pygame pygame.init()# 设置窗口大小 screen_size (640, 480) # 创建窗口 screen pygame.display.set_mode(screen_size) # 设置窗口标题 pygame.display.set_caption("使用键盘方向键移动的方块的简单小游戏")# 设置颜色 bg_colo…

帅气的性能监控平台Grafana(Windows下使用Grafana监控系统指标与GPU指标)

帅气的性能监控平台Grafana(Windows下使用Grafana监控系统指标与GPU指标) 前情提要 系统环境准备 windows_exporter下载 nvidia_gpu_exporter下载 prometheus下载 Grafana下载 安装指导 windows_exporter安装与nvidia_gpu_exporter安装 promethe…

ApacheNginx配置ssl证书

一、Apache配置ssl Linux版本:CentOS Linux release 7.9.2009 (Core) Apache版本:Apache/2.4.6 (CentOS) 1、安装Apache(使用默认yum源) [root10-35-1-25 ~]# yum -y install httpd2、查Apache版本&启动Apache [root10-35-…

深度解读NVMe计算存储协议-2

近日,NVME协议组织为了解决这些性能问题并为供应商提供标准化机制,在其架构中集成优化的计算功能,开发了NVM Express (NVMe) 计算存储特性。 计算存储的核心特性包括两个命令集:计算程序集和子系统本地内存。 其中,计算…

postgresql|数据库|pg_repack插件的部署和使用

一, 表和索引的膨胀现象 Postgres SQL 实现的MVCC的机制不同于 oracle , mysql innodb 的 undo tablespace 的机制。 表上所用的更新和删除等操作的行为,都不会实际的删除或修改,而是标记为死元祖 (dead rows or dead…

非鸿蒙官方低代码源码生成器

介绍 鸿蒙低代码可视化开发神器快速对鸿蒙ArkUI生成源码,结合类似小程序类似设计,页面设计底部菜单,支持宫格组件、轮播图、图文列表、图片组件、文本内容组件,快速对接第三方HttpApi。通过鸿蒙扩展axios扩展库加载数据源&#x…

jmeter+nmon+crontab简单的执行接口定时压测

一、概述 临时接到任务要对系统的接口进行压测,上面的要求就是:压测,并发2000 在不熟悉系统的情况下,按目前的需求,需要做的步骤: 需要有接口脚本需要能监控系统性能需要能定时执行脚本 二、观察 >…

Spring的事件监听机制

这里写自定义目录标题 1. 概述(重点)2. ApplicationEventMulticaster2.1 SimpleApplicationEventMulticaster2.2 AbstractApplicationEventMulticaster 3. ApplicationListener3.1 注册监听器3.2 自定义 4. SpringApplicationRunListeners 1. 概述&#…

协会认证!百望云荣获信创工委会年度“卓越贡献成员单位”称号

当前,新一轮科技革命和产业变革正加速重塑全球经济结构,强化企业科技创新的主体地位,推动创新链、产业链、人才链深度融合,加快科技成果产业化进程至关重要。 近日,中国电子工业标准化技术协会信息技术应用创新工作委员…

对付勒索病毒,复杂的往往无法落地

一道道复杂门墙防护安全, 还是一个精密的锁更安全? 👇👇👇 在网络数据安全问题频发的当下,除了常规的备份、灾备措施以外,企业是否有做好应对最坏情况的准备?一旦病毒绕过了一道道…

shell - 免交互

一.Here Document 免交互 1. 交互的概念 交互:当计算机播放某多媒体程序的时候,编程人员可以发出指令控制该程序的运行,而不是程序单方面执行下去,程序在接受到编程人员相应的指令后而相应地做出反应。 对于Linux操作系统中&…

ztest中ddof起什么作用

⭐️ statsmodels 中 ztest 基本使用 statsmodels 也是一个强大的统计分析库,提供了丰富的统计模型和检验功能。对于 Z 检验,statsmodels 提供了 ztest 函数。 以下是使用 statsmodels 进行 Z 检验的示例: from statsmodels.stats.weights…

ElementUI 组件:Container 布局容器

ElementUI安装与使用指南 Container 布局容器 点击下载learnelementuispringboot项目源码 效果图 el-container.vue&#xff08;Container 布局容器&#xff09;页面效果图 项目里el-container.vue代码 <script> import PagePath from "/components/PagePat…

[NOIP2011 提高组] 聪明的质监员

[NOIP2011 提高组] 聪明的质监员 题目描述 小T 是一名质量监督员&#xff0c;最近负责检验一批矿产的质量。这批矿产共有 n n n 个矿石&#xff0c;从 1 1 1 到 n n n 逐一编号&#xff0c;每个矿石都有自己的重量 w i w_i wi​ 以及价值 v i v_i vi​ 。检验矿产的流程…

Python代码覆盖率工具

Coverage.py是一个用于测量Python程序代码覆盖率的工具。它监视您的程序&#xff0c;注意代码的哪些部分已经执行&#xff0c;然后分析源代码&#xff0c;以确定哪些代码本可以执行&#xff0c;但没有执行。 覆盖率测量通常用于衡量测试的有效性。它可以显示代码的哪些部分正在…

S275 4G网络IO模块:智能酒店的理想选择

行业背景 随着物联网技术的发展&#xff0c;酒店服务也变得更加“智能”——自动灯光效果、室内温湿度控制、各种人性化操作等贴心服务&#xff0c;带给顾客真正的宾至如归之感。 同时&#xff0c;智慧酒店更为管理者提供了高效的管理手段&#xff0c;将酒店物耗、能耗、人员…

全网最简单的幻兽帕鲁服务器搭建教程

幻兽帕鲁是一款备受欢迎的多人在线游戏&#xff0c;为了提供更好的游戏体验&#xff0c;许多玩家选择自行搭建服务器。本文将指导大家如何简单快速地搭建幻兽帕鲁服务器&#xff0c;轻松享受游戏的乐趣。 第一步&#xff1a;购买游戏联机服务器 购买入口&#xff1a;https://tx…

【八大排序】直接插入排序 | 希尔排序 + 图文详解!!

&#x1f4f7; 江池俊&#xff1a; 个人主页 &#x1f525;个人专栏&#xff1a; ✅数据结构冒险记 ✅C语言进阶之路 &#x1f305; 有航道的人&#xff0c;再渺小也不会迷途。 文章目录 一、排序的概念二、直接插入排序2.1 基本思想2.2 适用说明2.3 过程图示2.4 代码实现2.…