2016-11-11 68 views
1

假设我有3个提交的分支主机,注释分别为t123,b1和b12。如何在没有特定提交的情况下搜索git日志

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

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

* b90b03f b12 
* 27f7577 b1 

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

+0

add'--invert-grep' – ElpieKay

回答

2

这听起来像你想要的是包括所有提交,其提交的信息匹配某种模式,但--grep包括承诺是比赛的一些模式。但是,“如何编写一个匹配某种模式之外的所有东西的正则表达式”的答案是:您不知道。

你并不需要,因为你可以使用别的(或者更准确地说,一些额外的)排除在它的字符串“T123”的承诺。特别是,如果你看一下​​,你会发现,它不仅拥有--grep=<pattern>的选择,但也是一个--invert-grep选项:

--invert-grep
           限制了提交输出到那些与日志消息不符合 的模式--grep=<pattern>

也就是说,不是发明了某种逆正则表达式,你只需告诉命令从反转结果正则表达式搜索。由于你的正则表达式只是一个没有元字符的固定字符串:

git log --grep t123 --invert-grep 

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


是,在某种意义上,不是不可能的;这只是太困难,效率低下,最重要的是,没有必要。

+0

是的,它确实有效地工作,谢谢! –

+0

如果你在另一个环境中有同样的问题,你可以写一个反转表达式,例如:'[^ t] | t [^ 1] | t1 [^ 2] | t12 [^ 3]', 't123' – lmcarreiro

+1

@lmcarreiro:那不太合适,因为如果我们有'foo t123','[^ t]'选项就会匹配'f'。事实上,如果我们只是't123'和正则表达式搜索,它会匹配,因为'[^ t]'匹配'1'!为了做到这一点,你需要一个*锚定的* regexp,或者再次用简单的反转来简化整个问题(这就是为什么'grep'具有'-v'的原因)。 – torek

相关问题