我们正在进行一个项目,大部分提交是由前端开发人员添加的。他主要编辑的是与我帮助的后端工作无关的HTML、CSS、JavaScript文件。如果我能显示排除了前端开发人员添加的git日志,那就太好了,这样我就可以获得与后端相关的提交视图。
是否有一个选项可以传递给git日志,允许我排除一个作者的所有提交?我只想排除这个开发人员的提交,但我仍然关心来自其他开发人员的提交。
--author='^(?!(author1|author2)).*$'
。 - yhagergit rev-list --format='%aN' --all \
| sed 'N;/\nauthorname$/d;s/commit \(.*\)/\n.*/\1/' \
| git log --stdin
当然,您可以使用任何标题替换--all
。
注:像这样的列表/选择/处理管道是基础,这正是Git(像许多Unix工具一样)构建的方式。
我认为这篇文章解释得很清楚。(尽管它是在@trojanfoe的链接下提到的)。主要是说:
然而,使用正则表达式排除特定作者或一组作者的提交是棘手的,如此处所述。相反,借助 bash 和 piping,您可以通过以下方式排除由 Adam 撰写的提交:
git log --format='%H %an' | # get a list of all commit hashes followed by the author name
grep -v Adam | # match the name but return the lines that *don't* contain the name
cut -d ' ' -f1 | # from this extract just the first part of the line which is commit ref
xargs -n1 git log -1 # call git log from that commit stopped after 1 commit
使用起来更加灵活
git log -i --author="^((?!abc).)*$" --perl-regexp
替代
git log -i --author="^(?!abc).*$" --perl-regexp
两者的区别在于后者仅排除以abc
开头的作者,例如作者abcddd
,但不包括ddabcd
或dddabc
等。而前者将排除所有这些示例:)请参见this post中的查找包含或不包含某些单词的行
我已经在Windows 10上使用Git测试了这两个方法。
lookahead
方法外,负lookbehind
方法也可以产生相同的效果:git log -i --author="^(.(?<!abc))*$" --perl-regexp
。 - cateyes