假设我有一个分支 master,有 3 次提交,注释分别为 t123、b1 和 b12。
* b90b03f (HEAD -> master) b12
* 27f7577 b1
* 7268b40 t123
现在,我想使用 git log --grep <regex>
搜索没有t123的log日志。
我想要的结果是
* b90b03f b12
* 27f7577 b1
那么如何使用正则表达式来满足要求呢?
最佳答案
听起来您想要的是包含提交消息不匹配某些模式的所有提交,但是 --grep
包括确实匹配某些模式的提交。但“我如何编写一个匹配除某些模式之外的所有内容的正则表达式”的答案是:你不需要。1
您不需要这样做,因为您可以使用其他内容(或更准确地说,其他内容)来排除其中包含字符串“t123”的提交。具体来说,如果您查看 the documentation for git log
,你会发现它不仅有它的--grep=<pattern>
选项,但也是 --invert-grep
选项:
--invert-grep
Limit the commits output to ones with log message that do not match the pattern specified with--grep=<pattern>
.
也就是说,您无需发明某种反向正则表达式,只需告诉命令将搜索正则表达式的结果反转即可。由于您的正则表达式只是一个固定字符串,其中没有元字符:
git log --grep t123 --invert-grep
会完成这项工作。 (=
和 --grep
之间的 <pattern>
对于 --grep
是可选的。)
1从某种意义上来说,这并非不可能;这太困难、效率低下,而且最重要的是,没有必要。
关于regex - 如何在没有特定提交的情况下搜索git日志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40544753/