我们正在开发一个项目,其中大部分提交都是由前端开发人员添加的。他主要编辑与我正在帮助的后端工作无关的 HTML、CSS、JavaScript 文件。如果我可以显示git log
前端开发人员添加的减号提交,那就太好了,这样我就可以查看与后端相关的提交。
有没有我可以传递的选项git log
,可以让我排除作者的所有提交?我只想排除这个开发人员的提交,我仍然关心查看其他开发人员的提交。
我们正在开发一个项目,其中大部分提交都是由前端开发人员添加的。他主要编辑与我正在帮助的后端工作无关的 HTML、CSS、JavaScript 文件。如果我可以显示git log
前端开发人员添加的减号提交,那就太好了,这样我就可以查看与后端相关的提交。
有没有我可以传递的选项git log
,可以让我排除作者的所有提交?我只想排除这个开发人员的提交,我仍然关心查看其他开发人员的提交。
您需要正则表达式来匹配不包含单词的行吗? 负前瞻就可以做到这一点,但你必须要求git
使用--perl-regexp
.
git log --author='^(?!krlmlr).*$' --perl-regexp
据git help log
,
--perl-regexp
... 需要编译 libpcre。
显然,并不是所有git
的都有这个;对于 Ubuntu 13.04 附带的版本,这是开箱即用的。
git rev-list --format='%aN' --all \
| sed 'N;/\nauthorname$/d;s/commit \(.*\)/\n.*/\1/' \
| git log --stdin
当然,用上面的任何你想要的头替换--all
。
编辑:像这样的列表/选择/处理管道是面包和黄油,这就是 git(就像许多 unix 工具一样)的构建方式。
我认为这篇文章解释得很清楚。(尽管在@trojanfoe 链接下提到了它)。主要是说:
然而,使用正则表达式排除特定作者或一组作者的提交是很棘手的,如此处所述。相反,转向 bash 和管道,您可以通过以下方式排除 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 的机制,您想要的某些日志选项不可用,例如 --graph。
使用起来更灵活
git log -i --author="^((?!abc).)*$" --perl-regexp
代替
git log -i --author="^(?!abc).*$" --perl-regexp
不同之处在于,后者仅排除以 开头的abc
作者,即 author abcddd
,但不排除ddabcd
ordddabc
等,而前者将排除所有这些示例:)请参阅这篇文章中的查找包含或不包含某些单词的行
我已经在Windows 10上使用Git测试了这两个。