git log 过滤

git log命令主要用于查看Git版本演变历史(也就是提交历史),同时根据追加的参数和选项不同,也会有不同的展示效果。

git log命令说明

git log官方文档说明

git log用于查询版本的历史,命令形式如下:

git log [<options>] [<since>..<until>] [[--] <path>...]

列出可以从给定的提交中通过 "父 “链接到达的提交,但不包括可以从前面有”^"的提交中到达的提交。 默认情况下,输出结果是按时间顺序倒置的。

你可以把它看成是一个集合操作。从命令行上给出的任何一个提交中可以到达的提交形成一个集合,然后从这个集合中减去任何一个前面带有'^'的提交。 剩下的提交内容就是命令的输出结果。 其他各种选项和路径参数也可以用来进一步限制结果。

不带参数

  • 如果不带任何参数,它会列出所有历史记录,最近的排在最上方,显示提交对象的哈希值,作者、提交日期、和提交说明
  • 如果记录过多,则按上下键,Enter(向下显示一行),空格(显示下一页),来控制显示。
  • q键退出历史记录列表。

按照数量过滤

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

git log -3

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

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

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

 git log --after="yesterday"

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

git log --after="2018-7-1" --before="2018-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查找提交记录时忽略大小写。
注意:如果想同时使用--grep--author,必须在附加一个--all-match参数。

按照文件过滤

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

git log -- foo.py bar.py
-(空格)文件或--[后边没有文件]

这里的 -- 是告诉Git,后面的参数是文件路径而不是branch分支)的名字。 如果后面的文件路径不会和某个branch产生混淆,你可以省略 -- ,比如 git log foo.py
后边的路径还支持正则,比如:git log *install.md ,是指定项目路径下的所有以install.md结尾文件的提交历史。
文件名应该放到参数的最后位置,通常在前面加上--并用空格隔开表示是文件。

git log file/

可以查看file文件夹下所有文件的提交记录。

按照提交内容过滤

想要按照提交的具体内容来过滤提交记录,也是可以办到的。比如有时候你想知道添加或者删除某行代码的提交,可以使用-S这样的参数。

log log -S"<string>"
git log -G"<string>"
#仅显示添加或删除内容匹配指定字符串的提交。

有时你想搜索,新增或删除某行代码相关的commit. 可以使用这条命令。

设你想知道Hello,World!这句话,是什么时候加入到项目里去的,可以用:git log -S"Hello,World!"

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

这是一个非常有用的debug工具,使用他可以定位所有跟某行代码相关的commit,甚至可以查看某行是什么时候被copy的,什么时候移到另外一个文件中去的。
注意:-S后没有"=",与查询内容之间也没有空格符。

按照提交区间过滤

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

git log ..
git log <since>..<until>

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

 git log main..feature

main..feature这个提交区间的表述,会给出所有已经存在于feature分支但还不存在于main分支的提交记录。换句话说,也就是feature分支已经距离main分支有多远了。
请注意如果你对调区间的两端(feature..main),你会得到所有已经存在于main分支但还未存在于feature分支的提交记录。如果git log命令在执行这两个区间时都有返回,那么也就意味着你的提交历史已经分叉了
如果是三个点,表示或的意思:git log master...test,意思是查询mastertest分支中的提交记录。
官网说明
<提交 1>…​<提交 2>,对合并很有用。 由此产生的提交集合是两个操作数之间的对称差。 以下两个命令是等价的:

$ git log A B --not $(git merge-base --all A B)
$ git log A...B

过滤合并提交

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

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

git log --no-merges

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

git log --merges

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

按标签tag

git log --tages=v1.0

直接这样是查询标签之前的commit。
加两个点,例如:git log --tages=v1.0..,是查询从v1.0以后的提交历史记录(不包含v1.0)。

按分支

git log  --

--branchName branchName参数:为任意一个分支名字,查看某个分支上的提交记录。

需要放到参数中的最后位置处。

如果分支名与文件名相同,系统会提示错误,可通过–选项,来指定给定的参数,是分支名还是文件名。

比如:在当前分支中有一个名为v1的文件,同时还存在一个名为v1的分支。如下:

git log v1 -- #此时的v1代表的是分支名字(--后边是空的)。git log -- v1 #此时的v1代表的是名为v1的文件。git log v1 -- v1 #代表v1分支下的v1文件。

按commit

git log commit #查询commit之前的记录,包含commit。
git log commit1 commit2 #查询commit1与commit2之间的记录,包括commit1和commit2。
git log commit1..commit2 # 同上,但是不包括commit1。

说明:

  1. 其中,commit可以是提交哈希值的简写模式,也可以使用HEAD代替。
  2. HEAD代表最后一次提交,HEAD^为最后一个提交的父提交,等同于HEAD~1
  3. HEAD~2代表倒数第二次提交。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

嵌入式linux系统中面试过程经验分享

大家好,今天主要给分享一下,如何在面试中介绍自己的项目经验,希望对大家有所帮助。 在面试时,经过寒暄后,一般面试官会让介绍项目经验。常见的问法是,说下你最近的(或最拿得出手的)一个项目。 根据我们的面试经验,发现有不少候选人对此没准备,说起来磕磕巴巴,甚…

vscode在windows系统上进行C/C++环境配置

随手笔记前言 vscode在windows系统上进行C/C环境配置 步骤如下 第一步 下载安装VSCode 这应该是最简单的一步&#xff0c;相信大家自己就可以完成。如果在vscode官网感觉下载特别慢的话&#xff0c;可以去试一下腾讯软件中心&#xff0c;我都是在这个网页上下载的。下载好之…

26、 MySQL数据库基础练习系列股票交易系统基础查询和复杂查询

5、基础查询 -- 1、查询用户信息仅显示姓名与手机号 SELECT username as 姓名,phone as 手机号 from users;-- 2、模糊查询和explain语句 alter table stocks add index stock_name_index(stock_name); explain SELECT * from stocks where stock_name like %东吴证券%; -- 3、…

【AIGC X UML 落地】从UML语句到UML图形的生成,来看Agent插件的制作

上篇我们讲到如何通过多智能体实现自然语言绘制UML图。 没有看过的,可以去看下原文:《【AIGC X UML 落地】通过多智能体实现自然语言绘制UML图》 其中有一个实现重点,就是如何将 PlantUML 语句生成 UML 图片。在这里笔者是通过自定义 Agent 插件来实现这一流程。 本文,就此…

面试-javaIO机制

1.BIO BIO&#xff1a;是传统的javaIO以及部分java.net下部分接口和类。例如&#xff0c;socket,http等&#xff0c;因为网络通信同样是IO行为。传统IO基于字节流和字符流进行操作。提供了我们最熟悉的IO功能&#xff0c;譬如基于字节流的InputStream 和OutputStream.基于字符流…

Vue 项目运行时,报错Error: Cannot find module ‘node:path‘

Vue 项目运行时&#xff0c;报错Error: Cannot find module ‘node:path’ internal/modules/cjs/loader.js:883throw err;^Error: Cannot find module node:path Require stack: - D:\nodejs\node_modules\npm\node_modules\node_modules\npm\lib\cli.js - D:\nodejs\node_mo…

问题解决:python安装依赖时网络问题报错

进行 pip install 时&#xff0c;安装轮子访问过慢而造成安装失败&#xff0c;有时候配置镜像源仍会出现莫名其妙的问题&#xff0c;包括网络代理问题等。看了一些解决方案&#xff0c;找出了一个最适合的方式&#xff0c;如下所示&#xff1a; pip install -i https://pypi.t…

linux 离线安装docker

测试服务器&#xff1a;银河麒麟V10 x86_64 注意&#xff1a;推荐使用国内的镜像站下载&#xff0c;因为官网不挂梯子无法访问&#xff0c;我用的是清华大学开源软件镜像站 一、下载离线包&#xff1a; 官网下载docker离线包 下载地址&#xff1a;https://download.docker.c…

使用VisualStudio2022制作安装包

总体介绍 解决方案里面需要有三个项目: Winform程序, Setup Project , 自定义配置项目(安装程序类) 1, Winform程序 就是你要打包的程序 2, Setup Project 就是制作安装包的 3, 自定义配置项目(安装程序类): 一个命令行项目里面只有一个安装程序类,用来控制安装后自动打开程序…

Windows USB设备驱动开发 - 常见概念的解释

我们听到许多 USB 术语几乎交替抛出。 它们都是什么意思&#xff1f;假设我们看到类似 “多亏了 USB 3.0&#xff0c;我可以将 SuperSpeed U 盘连接到电脑的 xHCI 主机控制器&#xff0c;并更快地复制文件。” 让我们了解该句子中的 USB 术语。 USB 3.0、USB 2.0 和 USB 1.0 请…

Winform 树形控件的开发实战

在Windows Forms&#xff08;WinForms&#xff09;开发中&#xff0c;树形控件(TreeView)是非常常用的一种控件&#xff0c;用于展示层级结构的数据&#xff0c;如文件系统、组织结构、菜单等。下面&#xff0c;我将通过一个实战示例&#xff0c;向你展示如何在WinForms中开发和…

计网实训——不相同网段的PC相互通信

目录 提前准备APP路由器指令 实验一1、实验需求&#xff08;1&#xff09;实现同网段的PC相互通信。&#xff08;2&#xff09;实现不相同网段的PC相互通信。&#xff08;3&#xff09;分析相同和不同网段PC通信时MAC地址的变化。 2、实验拓扑3、实验步骤及实验截图&#xff08…

rk3588 debian系统配置AP6275S ap模式

rk3588 debian配置AP6275S ap模式 文章目录 rk3588 debian配置AP6275S ap模式前言一、内置开启ap模式的系统工具1.1、内置hostapd工具1.2、内置dhcp工具二、热点配置2.1、 /etc/hostapd/hostapd.conf 配置2.2、/etc/dhcp/dhcpd.conf 配置三、测试3.1、运行dhcpd3.2、运行hostap…

[数据结构】——七种常见排序

文章目录 前言 一.冒泡排序二.选择排序三.插入排序四.希尔排序五.堆排序六.快速排序hoare挖坑法前后指针快排递归实现&#xff1a;快排非递归实现&#xff1a; 七、归并排序归并递归实现&#xff1a;归并非递归实现&#xff1a; 八、各个排序的对比图 前言 排序&#xff1a;所谓…

uni-app 微信小程序开发到发布流程

1. uni-app 微信小程序开发到发布流程 1.1. 新建一个uni-app 项目 1.2. 发行微信小程序 1.3. 微信开发者平台的微信小程序appid 复制进来&#xff08;点击发行&#xff09; 1.4. IDE may already started at port xxxx, trying to connect &#xff08;1&#xff09;关闭微信…

小白上手AIGC-基于FC部署stable-diffusion

AIGC AIGC&#xff08;人工智能创造内容&#xff09;作为一种基于人工智能技术生成内容的新型创作模式。打破了过去大家对于AI的理解都是说只能涉足部分领域而无法涉足艺术或者是其他的创作领域的定律&#xff0c;现在的AIGC也能够创作内容了&#xff0c;而不再只是单纯的返回…

动手学深度学习(Pytorch版)代码实践 -计算机视觉-45多尺度目标检测

45多尺度目标检测 # 多尺度锚框 """ 减少图像上的锚框数量并不困难。 比如&#xff0c;我们可以在输入图像中均匀采样一小部分像素&#xff0c; 并以它们为中心生成锚框。 此外&#xff0c;在不同尺度下&#xff0c;我们可以生成不同数量和不同大小的锚框。 直…

Apifox 更新|定时任务、内网自部署服务器运行接口定时导入、数据库 SSH 隧道连接

Apifox 新版本上线啦&#xff01; 看看本次版本更新主要涵盖的重点内容&#xff0c;有没有你所关注的功能特性&#xff1a; 自动化测试支持设置「定时任务」支持内网自部署服务器运行「定时导入」数据库均支持通过 SSH 隧道连接自动化测试数据库操作优化 1、自动化测试支持设…

C++ 100 之 容器插入和删除

vector插入和删除操作 insert(const_iterator pos, int count,ele);//迭代器指向位置pos插入count个元素ele. push_back(ele); //尾部插入元素ele pop_back();//删除最后一个元素 erase(const_iterator start, const_iterator end);//删除迭代器从start到end之间的元素 erase(c…

Mac(M1芯片)安装多个jdk,Mac卸载jdk

1.jdk下载 oracle官方链接&#xff1a;oracle官方下载链接 2.安装 直接下一步&#xff0c;下一步就行 3.查看是否安装成功 出现下图内容表示安装成功。 4.配置环境变量 open -e .bash_profile 路径建议复制过去 #刷新环境变量 source ~/.bash_profile 5.切换方法 6.jdk…