假设我有3个提交的分支主机,注释分别为t123,b1和b12。如何在没有特定提交的情况下搜索git日志
* b90b03f (HEAD -> master) b12
* 27f7577 b1
* 7268b40 t123
而现在,我想用git log --grep <regex>
搜索日志日志而不T123。 我想要的结果是
* b90b03f b12
* 27f7577 b1
那么,如何使用正则表达式来满足需求?
假设我有3个提交的分支主机,注释分别为t123,b1和b12。如何在没有特定提交的情况下搜索git日志
* b90b03f (HEAD -> master) b12
* 27f7577 b1
* 7268b40 t123
而现在,我想用git log --grep <regex>
搜索日志日志而不T123。 我想要的结果是
* b90b03f b12
* 27f7577 b1
那么,如何使用正则表达式来满足需求?
这听起来像你想要的是包括所有提交,其提交的信息不匹配某种模式,但--grep
包括承诺是做比赛的一些模式。但是,“如何编写一个匹配除某种模式之外的所有东西的正则表达式”的答案是:您不知道。
你并不需要,因为你可以使用别的(或者更准确地说,一些额外的)排除在它的字符串“T123”的承诺。特别是,如果你看一下,你会发现,它不仅拥有--grep=<pattern>
的选择,但也是一个--invert-grep
选项:
--invert-grep
限制了提交输出到那些与日志消息不符合 的模式--grep=<pattern>
。
也就是说,不是发明了某种逆正则表达式,你只需告诉命令从反转结果正则表达式搜索。由于你的正则表达式只是一个没有元字符的固定字符串:
git log --grep t123 --invert-grep
会完成这项工作。 (--grep
和<pattern>
部分之间的=
是可选的--grep
。)
是,在某种意义上,不是不可能的;这只是太困难,效率低下,最重要的是,没有必要。
是的,它确实有效地工作,谢谢! –
如果你在另一个环境中有同样的问题,你可以写一个反转表达式,例如:'[^ t] | t [^ 1] | t1 [^ 2] | t12 [^ 3]', 't123' – lmcarreiro
@lmcarreiro:那不太合适,因为如果我们有'foo t123','[^ t]'选项就会匹配'f'。事实上,如果我们只是't123'和正则表达式搜索,它会匹配,因为'[^ t]'匹配'1'!为了做到这一点,你需要一个*锚定的* regexp,或者再次用简单的反转来简化整个问题(这就是为什么'grep'具有'-v'的原因)。 – torek
add'--invert-grep' – ElpieKay