Azure DevOps推送报错,如何用Git Log查找非@abc.com邮箱的提交?
查找所有作者邮箱非@abc.com的Git提交
方法1:使用Perl正则直接匹配(推荐)
用--author参数结合Perl正则,精准定位作者邮箱部分并排除@abc.com格式:
git log --name-only --author='<[^>]+@(?!abc\.com)[^>]+>' --perl-regexp
正则说明:
<[^>]+:匹配邮箱开头的<符号及前面的用户名部分@(?!abc\.com):负向前瞻断言,确保@后面不是abc.com[^>]+>:匹配邮箱剩余部分直到结尾的>符号
方法2:通过提取邮箱后过滤
如果Perl正则不生效,也可以先提取提交的邮箱信息,再过滤不符合要求的提交:
git log --name-only --format="%H %ae" | awk '$2 !~ /@abc\.com$/ {print $1}' | xargs git log --name-only --no-walk
步骤说明:
git log --format="%H %ae":输出每个提交的哈希值(%H)和作者邮箱(%ae)awk '$2 !~ /@abc\.com$/ {print $1}':过滤掉邮箱以@abc.com结尾的提交,只保留不符合要求的提交哈希xargs git log --name-only --no-walk:根据哈希值查看这些提交的详细文件变更信息
你之前的正则失败原因
- 第一个正则未考虑Git作者字段的格式(
Name <email@domain.com>),直接匹配@后面的内容,没有定位到邮箱的<>包裹区域,导致匹配范围错误 - 第二个正则存在语法错误:
(?!*)是无效的正则表达式,且未正确定位到邮箱位置
内容的提问来源于stack exchange,提问作者Fylix
相关产品推荐
相关产品推荐

