2016-11-11 10 views
1

3つのコミットを持つブランチマスタがあるとします。コメントはt123、b1、b12と別々です。コミットせずにgit logを検索する方法

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

そして今、私はT123せずにログログを検索するgit log --grep <regex>を使用したいです。私が欲しい 結果は、どのように私は要件を満たすために正規表現を使用しない

* b90b03f b12 
* 27f7577 b1 

のですか?

+0

を追加 '--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'にマッチするので一致します!この作業をするには、* anchored * regexpが必要です。逆に、問題全体を単純化するだけです(これは、 'grep'が' -v'を持っている理由です)。 – torek

関連する問題