基于正则表达式仅显示差异/补丁的相关块

wrk*_*fct 21 diff patch git

git log -G<regex> -p是一个很好的工具,可以在代码库的历史记录中搜索与指定模式匹配的更改。然而,在几乎不相关的大块海洋中找到差异/补丁输出中的相关大块可能会让人不知所措。

当然可以搜索git log原始字符串/正则表达式的输出,但这对减少许多不相关更改的视觉噪音和干扰几乎没有作用。

继续阅读git log,我看到了--pickaxe-all,这与我想要的完全相反:它扩大了输出(到整个变更集),而我想限制它(到特定的大块)。

本质上,我正在寻找一种方法来“智能地”将差异/补丁解析为单个大块,然后对每个大块执行搜索(仅针对更改的行),丢弃不匹配的大块,并输出那些大块那做。

是否存在我描述的工具?有没有更好的方法来获得匹配/受影响的帅哥?

我做过的一些初步研究......

  • 如果可以grep使用 diff/patch 输出并使上下文选项值动态化(例如,通过正则表达式而不是行数),那可能就足够了。但grep并非完全按照这种方式构建(我也不一定要求该功能)。

  • 我找到了patchutils套件,最初听起来它可能适合我的需求。但是在阅读其man页面后,这些工具似乎无法处理基于正则表达式的匹配块。(不过,他们可以接受帅哥的名单……)

  • 我终于遇到了splitpatch.rb,它似乎可以很好地处理补丁的解析,但它需要显着增强以通过 处理读取补丁stdin,匹配所需的大块,然后输出大块。

小智 9

这里/sf/answers/2480430011/描述了一种方法来做你正在寻找的东西。有效地:

git diff -U1 | grepdiff 'console' --output-matching=hunk

它仅显示与给定字符串“控制台”匹配的大块头。