如何列出不以特定单词开头的所有提交记录

4

我的主要目标是过滤掉所有的拉取请求合并,理论上我希望以下操作可以实现(但事实并非如此)

git log --grep="^!(Merge)"

我有遗漏吗?

2个回答

11

首先,你不能简单地在正则表达式中加一个感叹号来否定一个单词(你从哪里找到的这种方法?)。你可能已经使用了lookarounds来实现这个效果,但是常规的grep正则表达式不支持它们。直接使用grep时,您可以传递-P选项以使用更强大的Perl正则表达式,但我没有在git日志中找到类似的选项。

不过,有一个--no-merges选项可以从日志中过滤掉所有合并提交:

git log --no-merges

man页表示--no-merges的意思是:

不输出具有多个父级的提交


2

你不能像那样使用正则表达式,以下是更好的方法:

git log | grep -o '^(Merge)'

这个命令可以提供更多信息:

git log --pretty=format:'%h by %an, %ar, %s' | grep -o '^((?!Merge).)*$'

我认为你使用了!来反转它,但我知道的唯一已知的反转正则表达式搜索的方法就是上面的。但是,--no-merge会提供更好的信息,只是写作未来的参考。


不幸的是,那只会返回提交信息,而git log本身可以提供更多的信息。 - KL-7
我更新了我的回答,但是你的回答依旧更好,为了以后的参考。 - Learath2
感谢Learath2的回答。虽然KL-7并不完全是我想要的,但我仍接受它。话说回来,它确实解决了问题 :D - Kostas Konstantinidis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接