git - 如何使用 git 进行 grep 但限制某些提交?
问题描述
假设我在 master 分支中,我只想从某些提交中 grep 单词,但这些单词仍在 master 分支中。换句话说,我想找到在某些提交中添加的那些单词并且仍然存在。
前任,
commit 76894a679551e1c9e98593219033a2cf115b163d (HEAD -> master)
Change to fruit
-Apple apple dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor.
+Banana apple dolor apple amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor.
commit e3e0a64cf46cbe49eea17205f679e98ca213a50b
Change to apple
-Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor.
+Apple apple dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor.
commit 71b609da3fe64092dd598a69e36770eb5636afec
Init
+Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor.
(END)
我想找出在 76894 中添加的苹果,所以只有引用的是我正在寻找的,
Banana "apple" dolor apple amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor.
而不是Banana apple dolor "apple" amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor.
解决方案
我认为您所需要的只是一个简单的git grep
:
git grep apple master
例如。该git grep
命令采用可选的树参数,“树”是作为快照存储在提交中的内容。
您特别要求:
在某些提交中添加的单词仍然存在
因为 Git 存储的是快照,而不是差异,所以根据定义,在任何先前的提交中添加并且仍然存在的单词在快照中。
另一方面,如果您的意思是:
- 如果出现以下情况,我想找到“苹果”:
- 它存在于提交 C1、C2 或 C3的文件F中,并且
- 它现在也存在
master
于文件F的尖端
那么你需要一个两遍算法:首先,检查正则表达式是否在非提示提交中的任何特定文件中匹配,然后再次检查提示提交。当且仅当您在步骤 1 和 2 中都找到它时,打印提示提交的哈希 ID(可能还有文件和匹配行)。
请注意,git grep
一次可以搜索多个提交。要查看该词是否apple
出现在这三个提交中的任何一个文件中,只需运行:
git grep apple C1 C2 C3
输出将包含原始提交哈希 ID,然后是文件名,然后是匹配的行:
$ git grep "go build" $(git rev-list HEAD)
f6b272b0c674c2d5022e90c3dec868af4ea26522:Makefile: go build -ldflags "-X main.version=$$(git describe --always --dirty)"
e50f217c3e11c6ee1fb67ee720c97f4085d6c46b:Makefile: go build
(这个特定的存储库现在非常小,Makefile
在我-version
支持命令之前和之后只有两个副本)。
推荐阅读
- jenkins - 构建失败时从 Jenkins 管道通知 slack 用户
- java - 如何将数据从一次打开的活动传输到下一次
- ruby - 如何使用 rspec 测试写入文件?
- javascript - 将 ISO 日期字符串隐藏到 x 天/分钟前
- google-apps-script - 使用 Apps 脚本将用户输入输入到 Google 表格并处理查询
- c# - API 返回小数的科学计数法
- javascript - 尝试运行或启动 dataTables.js 时收到 TypeError
- reactjs - React Navigation 5 - 如何从 headerRight 导航?
- c# - 指定用于发送多播 IGMP JOIN 的接口(c# 套接字)
- javascript - AJAX 请求返回不需要的 HTML 代码以及请求的数据