据我所知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 *
答案 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:]]*
答案 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
”开头的更改。
答案 2 :(得分:0)
TL; DR:git diff -G不能仅包含与正则表达式匹配的更改来排除更改。
看看git diff: ignore deletion or insertion of certain regex
此处torek解释了git log
和git diff
的工作方式以及参数-G
的工作方式。