使用git diff --ignore-matching-lines为何忽略非空行修改?
为什么
git diff --ignore-matching-lines='^$'会忽略非空行的修改 你遇到的问题核心是对--ignore-matching-lines参数的匹配逻辑理解有误,以及正则表达式的写法不符合需求:
参数匹配目标不是文件行,而是diff输出行
--ignore-matching-lines的作用是过滤diff输出中的行,而非原文件或新文件中的行。diff输出里,添加的行以+开头,删除的行以-开头,上下文行以空格开头。你用的^$是匹配空行,但实际diff输出中几乎没有这样的行——添加的空行在diff里显示为^\+$(即一行只有+),删除的空行显示为^-$(一行只有-),所以你的正则根本没匹配到任何空行相关的diff行。为何非空行修改也被隐藏?
这种情况大概率是因为你的Git版本对该参数的处理逻辑特殊:当你指定--ignore-matching-lines时,Git会尝试过滤所有匹配正则的行,如果过滤后整个diff hunk(变更块)中没有剩余的变更行(即没有+或-开头的行),就会隐藏整个hunk。但在你的场景中,非空行的修改应该不会被匹配,除非你的正则表达式被shell错误解析(比如未用单引号包裹导致^$被展开),或者你的Git版本存在bug。正确忽略空行变更的方式
如果你想忽略文件中空行的添加/删除,应该使用专门的参数--ignore-blank-lines,而不是--ignore-matching-lines:
git diff --ignore-blank-lines test.txt
如果非要用--ignore-matching-lines,则需要编写匹配diff中空行变更的正则:
git diff --ignore-matching-lines='^[+-]$' test.txt
内容的提问来源于stack exchange,提问作者Eric
相关产品推荐
相关产品推荐

