2016-11-11 62 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

相關問題