如何在没有特定提交的情况下搜索 git 日志

how to search git log without a certain commit

假设我有一个分支 master 有 3 个提交,评论分别是 t123、b1 和 b12。

* b90b03f (HEAD -> master) b12
* 27f7577 b1
* 7268b40 t123

而现在,我想用git log --grep <regex>搜索没有t123的log日志。 我想要的结果是

* b90b03f b12
* 27f7577 b1

那么如何使用正则表达式来满足要求呢?

听起来您想要的是包括提交消息匹配某种模式的所有提交,但是--grep包括匹配的提交 匹配某种模式。但是 "how do I write a regexp that matches everything except some pattern" 的答案是:你没有。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>.

也就是说,您无需发明某种反正则表达式,只需告诉命令将 search 中的 result 反转为正则表达式。由于您的正则表达式只是一个固定字符串,其中没有元字符:

git log --grep t123 --invert-grep

会完成这项工作。 (--grep<pattern> 之间的 = 部分对于 --grep 是可选的。)


1从某种意义上说,这并非不可能;这太难了,效率低下,最重要的是,没有必要。