首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在提交中搜索所有删除项?

如何在提交中搜索所有删除项?
EN

Stack Overflow用户
提问于 2021-04-11 21:11:28
回答 2查看 31关注 0票数 2

我要提交许多文件。我想搜索所有删除的字符串(或正则表达式),并显示包含匹配的文件列表(理想情况下包含删除的相关摘录)。

使用git log -p -S 'string',我可以滚动和搜索所有更改,但我不知道如何将输出限制为某个提交,也不能预先过滤删除项(我可以用^-开始我的正则表达式,但这很混乱)。

EN

回答 2

Stack Overflow用户

发布于 2021-04-12 06:21:06

使用git log -p -S 'string',我可以滚动和搜索所有更改,但我不知道如何将输出限制为某个提交...

这一部分很简单:git log的主要功能是从某个特定的提交开始,一个接一个地遍历提交(向后,就像Git总是做的那样)。默认情况下,如果您没有指定从哪个提交开始,则从HEAD提交开始,然后一直执行下去。但是如果您指定了一个特定的提交,它将从那里开始-,使用-n,您可以告诉它遍历多少个提交,所以如果您将其设置为1,那么在遍历您指定的一个提交之后,它将“向后遍历”零次:

代码语言:javascript
运行
复制
git log -n 1 -p -S 'string' <hash-id>

例如。

您也可以使用--no-walk来达到相同的效果。如果您想要检查两个或三个特定的提交,这会更有用:

代码语言:javascript
运行
复制
git log --no-walk -p -S 'string' <hash1> <hash2> <hash3>

例如。

和我不能提前过滤删除的内容(我可以用^开始我的正则表达式--但那很混乱)。

在这里,git log并没有多大帮助。但是,您可以将git log的输出重定向到一个文件,然后使用任何适当的命令打开该文件,这些命令使您可以轻松地找到删除的内容(grep、您的编辑器等等)。

请注意,^-.*<string>并不意味着查找删除的更改,而是查找以-开头的更改文本。除非您正在查看补丁文件本身,以便文件中的文本以-开头,否则这不会有任何帮助。git log作为所示修补程序的一部分生成的-不包括在正则表达式搜索中,即使使用--pickaxe-regex也是如此。

您可以考虑在--reverse中使用git blame

票数 3
EN

Stack Overflow用户

发布于 2021-04-13 00:03:20

一旦您有了目标提交的散列,您就可以使用:

代码语言:javascript
运行
复制
# to get the list of matches in that commit :
git grep -e 'string' hash

# to get the list of matches in that commit's parent :
git grep -e 'string' hash^

git grep还有一个-c选项,可以打印每个文件的匹配计数,而不是打印整个行。

您可以将其用作脚本的输入:

  • 如果你的意思是“搜索所有出现次数减少的文件”:逐个文件比较git grep -c ...,检查出现次数减少的文件

  • 如果你的意思是“在全局出现次数减少的地方保持提交”:对单个计数求和,并比较

  • 等...
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67045370

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档