いくつかの追加のコンテキストの場合:
あなたが使用するときに起こっていること--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
あるため、これも短くなります。