8

我们正在开发一个项目,其中大部分提交都是由前端开发人员添加的。他主要编辑与我正在帮助的后端工作无关的 HTML、CSS、JavaScript 文件。如果我可以显示git log前端开发人员添加的减号提交,那就太好了,这样我就可以查看与后端相关的提交。

有没有我可以传递的选项git log,可以让我排除作者的所有提交?我只想排除这个开发人员的提交,我仍然关心查看其他开发人员的提交。

4

4 回答 4

7

您需要正则表达式来匹配不包含单词的行吗? 负前瞻就可以做到这一点,但你必须要求git使用--perl-regexp.

git log --author='^(?!krlmlr).*$' --perl-regexp

git help log

--perl-regexp... 需要编译 libpcre。

显然,并不是所有git的都有这个;对于 Ubuntu 13.04 附带的版本,这是开箱即用的。

于 2013-07-25T19:25:14.093 回答
3
git rev-list --format='%aN' --all \
| sed 'N;/\nauthorname$/d;s/commit \(.*\)/\n.*/\1/' \
| git log --stdin

当然,用上面的任何你想要的头替换--all

编辑:像这样的列表/选择/处理管道是面包和黄油,这就是 git(就像许多 unix 工具一样)的构建方式。

于 2013-07-25T18:44:43.937 回答
0

我认为这篇文章解释得很清楚。(尽管在@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。

于 2013-07-25T18:42:58.183 回答
0

使用起来更灵活

git log -i --author="^((?!abc).)*$" --perl-regexp

代替

git log -i --author="^(?!abc).*$" --perl-regexp

不同之处在于,后者仅排除以 开头的abc作者,即 author abcddd,但不排除ddabcdordddabc等​​,而前者将排除所有这些示例:)请参阅这篇文章中的查找包含或不包含某些单词的行

我已经在Windows 10上使用Git测试了这两个。

于 2020-01-16T04:02:38.693 回答