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

标签 regex git git-log

假设我有一个分支 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/

相关文章:

从模式的某个位置替换 Python 正则表达式

java - Grafana正则表达式

git checkout 在 --assume-unchanged 文件上抛出错误

git - 使用 Git 挑选提交意味着什么?

git log --before ="4 months"显示 3 周前提交的分支。我究竟做错了什么?

regex - 为什么 Windows 上的 git commit-msg 与正则表达式不匹配

git - 我在 git log 中找不到我的一些提交,但我可以使用 git show 看到它,为什么?

git - 如何从浅克隆中获取完整的提交日志?

git - `git log --pretty` 输出的条目之间一致分隔的格式字符串

php - 删除 <code> block 之外的所有空格、换行符和制表符