我的主要目标是过滤掉所有拉取请求合并,因此理论上我希望以下工作(它没有)
git log --grep="^!(Merge)"
我错过了什么吗?
首先,您不能简单地通过在正则表达式中的单词前面加上一个 bang 来否定它(您在哪里找到的?)。您可能为此使用了环视,但常规 grep 正则表达式不支持它们。直接使用 grep 可以传递-P
选项以使用更强大的 Perl 正则表达式,但我没有找到 git log 的类似选项。
不过,有一个--no-merges
选项可以过滤掉日志中的所有合并提交:
git log --no-merges
手册页说这--no-merges
意味着:
不要打印多个父级的提交
这是不正确的,你蚂蚁使用像这样的正则表达式会更好:
git log | grep -o '^(Merge)'
这将提供更多信息:
git log --pretty=format:'%h by %an, %ar, %s' | grep -o '^((?!Merge).)*$'
我想你用过!要反转它,但我知道的唯一已知的反向 revex 搜索方式就像上面一样。仍然 --no-merge 会提供更好的信息,只是为了将来参考而写作