对于一些额外的上下文:
--grep='\n\n'
使用时发生的事情\n
并不特别,所以它只是意味着n
:
您得到的结果与--grep='nn'
.
至于你的实际问题:
请注意,--grep
在换行符处拆分提交消息并将模式分别与每个子字符串匹配。这意味着您不能编写一个模式--grep
来确定它是否与第一行不同的行匹配。
此外,由于每条提交消息都以换行符结尾,因此拆分总是会产生至少一个完全空的子字符串。这意味着每个提交都匹配--grep='^$'
。
因此,绝对没有办法使用--grep
to limitgit log
的输出来提交多行消息。
所以这样做的唯一方法是使用che's answer中给出的方法。正如我在那里评论的那样,我建议这种特殊的形式:
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
来过滤掉提交消息正文行,并且制表符也恰好是默认字段分隔符,cut
因此它也更短。