我正在尝试使用不以[core]
开头的消息来识别所有提交。这些是我失败的尝试:
简单方法
git rev-list --grep '^(?!(\[core\]).).+' "branch1...branch2"
启用扩展标记
git rev-list -E --grep '^(?!(\[core\]).).+' "branch1...branch2"
错误消息fatal: command line, '^(?!(\[core\]).).+': Invalid preceding regular expression
。
git grep似乎不支持负面预测。
将所有提交列表与带有标记(cf. this answer)的列表进行比较:
git rev-list "branch1...branch2" | grep -Fxv <(git rev-list -E --grep '^\[core\].+' "branch1...branch2")
sh: syntax error near unexpected token `('
P.S:我无法升级到Git 2.x,因此--invert-grep
不是选项
答案 0 :(得分:1)
这样的事情可能有用。
git rev-list "branch1...branch2" --not $(git rev-list --grep '^\[core\]')
选择该列表中与您不想要的模式匹配的修订,然后在--not
的另一次调用中使用rev-list
否定该修订列表。
您还可以通过使用如下实际文件来避免第三次尝试中的进程替换:
git rev-list -E --grep '^\[core\].+' "branch1...branch2" > core.list
git rev-list "branch1...branch2" | grep -Fxvf core.list
答案 1 :(得分:0)
如果它符合您使用批处理文件的要求,这是一个解决方案:
#!/bin/sh
range="branch1...branch2"
validCommits=`git rev-list -E --grep '^\[core\]' "$range"`
badCommits=`git rev-list "$range" | grep -Fxv "$validCommits"`