いくつかの追加のコンテキストの場合:
あなたが使用するときに起こっていること--grep='\n\n'はそれ\nが特別ではないのでそれは単に意味しnます:
と同じ結果が得られ--grep='nn'ます。
あなたの実際の質問に関して:
--grepコミットメッセージを改行で分割し、パターンを各サブストリングと個別に照合することに注意してください。--grepつまり、最初の行とは異なる行と一致しているかどうかを判断できるパターンを作成することはできません。
さらに、すべてのコミットメッセージは改行で終わるため、分割すると常に少なくとも1つの完全に空のサブストリングが生成されます。これは、すべてのコミットが一致することを意味し--grep='^$'ます。
したがって、の出力を複数行メッセージでのコミット--grepに制限するために使用する方法はまったくありません。git log
したがって、それを行う唯一の方法は、 cheの回答で与えられたアプローチを使用することです。私がそこでコメントしたように、私はこの特定の形式を提案します:
git log --format='%H%x09%x09%x09%b' \
| egrep '^[0-9a-f]{40}\t\t\t.' \
| cut -f1 \
| git log --stdin --no-walk # or whatever
このバージョンでgrepは、コミットIDで始まり、3つのタブが続き、その後に任意の文字が続く行を保持します(つまり、何も続かない、つまり、これらは対象のコミットです)。grepこのパターンがコミットメッセージ本文に表示される可能性は非常に低く、コミットメッセージ本文の行を除外するのに1秒も必要ありません。また、タブ文字もデフォルトのフィールド区切り文字でcutあるため、これも短くなります。