Git diff:忽略以单词开头的行

时间:2018-11-23 18:26:29

标签: regex git git-diff

据我所知here,我们可以使用以下命令告诉git diff忽略以*开头的行:

git diff -G '^[[:space:]]*[^[:space:]*]'

如何告诉git忽略以一个单词或更多单词(例如:* Generated at)开头的行,而不仅仅是一个字符?

该文件将被忽略,它仅包含一些琐碎的更改:

- * Generated at 2018-11-21
+ * Generated at 2018-11-23

该文件不应被忽略,它不仅包含微不足道的更改:

- * Generated at 2018-11-21
+ * Generated at 2018-11-23
+ * This line is important! Although it starts with a * 

3 个答案:

答案 0 :(得分:2)

考虑到您忽略了不匹配与正则表达式匹配的更改,您只需要将表达式中想要的单词放在一个超前捕获组中,就像这样:

git diff -G '^(?=.*Generated at)[[:space:]]*[^[:space:]*]'

请注意,如果要继续添加要忽略的单词,只需继续添加这些组即可(不要忘记.*): 但是,如果字符串整体上包含“ 任意位置生成的”,则将其忽略。如果要确切定义它的开始方式,请用.替换[^[:word:]]

git diff -G '^(?=[^[:word:]]*Generated at)[[:space:]]*[^[:space:]*]'

您可以在

上查看其行为。

版本1: .*

https://regex101.com/r/kdv4V0/1

版本2: [^[:word:]]*

https://regex101.com/r/kdv4V0/2

答案 1 :(得分:2)

Git使用的POSIX正则表达式似乎不支持lookarounds。这就是@Myys 3's approach不起作用的原因。不太优雅的解决方法可能是这样的:

git diff -G '^\s*([^\s*]|\*\s*[^\sG]|\*\sG[^e]|\*\sGe[^n]|\*\sGen[^e]|\*\sGene[^r]|\*\sGener[^a]|\*\sGenera[^t]|\*\sGenerat[^e]|\*\sGenerate[^d]).*'

这将过滤掉所有以“ * Generated”开头的更改。

测试:https://regex101.com/r/kdv4V0/3

答案 2 :(得分:0)

TL; DR:git diff -G不能仅包含与正则表达式匹配的更改来排除更改。

看看git diff: ignore deletion or insertion of certain regex 此处torek解释了git loggit diff的工作方式以及参数-G的工作方式。