等价:git log --exclude-author?

and*_*dol 33 git

在工作中,我们有一个git repo,其中大多数提交都是由bot用户自动提交的.有时我更喜欢从该repo查看git日志,但没有看到自动提交.我想它可以被描述为倒置的"git log --author"或"git log --exclude-author = botuser",如果存在选项的话.

目前我执行以下操作,缩写为bash别名.

git log --format="%H %aE" | grep -v -F botuser@domain | while read hash email; do git log -1 $hash; echo; done | less
Run Code Online (Sandbox Code Playgroud)

我的问题是,如果对我想要完成的事情有一个不那么强硬的解决方案?

quo*_*tor 38

来自https://coderwall.com/p/tzdzwa:

git log --perl-regexp --author='^((?!excluded-author-regex).*)$'
Run Code Online (Sandbox Code Playgroud)

这对我有用.

如果您不想--perl-regexp每次都指定:

git config --global grep.patternType perl
Run Code Online (Sandbox Code Playgroud)

  • 这需要 git 1.8.0 或更高版本。 (2认同)

Von*_*onC 29

警告,mateor答案将不再适用于 Git 2.35(2022 年第一季度)。

\n
 # WRONG:\n git log --invert-grep --author=<pattern>\n
Run Code Online (Sandbox Code Playgroud)\n

quodlibetor答案仍然有效:

\n
git log --perl-regexp --author=\'^((?!excluded-author-regex).*)$\'\n
Run Code Online (Sandbox Code Playgroud)\n

但是:不再 git log --invert-grep --author=<pattern>排除作者。

\n

" git log --invert-grep --author=<name>" ( man )用于排除给定作者编写的提交,但现在 " --invert-grep" 只影响由 " " 选项进行的匹配--grep=<pattern>

\n

请参阅Ren\xc3\xa9 Scharfe ( )的提交 794c000(2021 年 12 月 17 日)。\n (由Junio C Hamano 合并 -- --提交2043ce8,2022年 1 月 5 日)rscharfe
gitster

\n
\n

log:--invert-grep只允许反转--grep

\n

报告人:Dotan Cohen
\n签署人:Ren\xc3\xa9 Scharfe

\n
\n
\n

该选项--invert-grep被记录为过滤掉消息与--grep过滤器匹配的提交。
\n但是,它也会影响标头匹配 ( --author, --committer),这不是有意的。

\n

将该选项的处理移至grep.c,因为只有那里的代码才能区分标头中的匹配与消息正文中的匹配。
\n如果--invert-grep给出则启用扩展表达式(不是正则表达式类型,我们只需要 \' git grep\' ( man )即可--not工作),否定主体模式并通过捎带机制检查它们是否collect_hits匹配grep_source_1()

\n

收集结构中的匹配grep_opt有点不确定,但是"last_shown"我们有一个将状态信息写入该结构的先例。

\n
\n
\n

为什么?经过2017 年 6 月的初步讨论后,2021 年 12 月再次讨论

\n
\n

bug发生之前你做了什么?

\n
$ git log -8 --author=Shachar --grep=Revert --invert-grep\n
Run Code Online (Sandbox Code Playgroud)\n

您预计会发生什么?

\n

我希望看到最后 8 个提交,其中提交消息中Shachar没有\n字符串“ ”。Revert

\n

相反发生了什么?

\n

提交列表包括除 之外的作者的提交Shachar

\n

您的预期与实际发生的情况有何不同?

\n

当使用“ ”\n选项时, “ --author”过滤器似乎被忽略。\n我也尝试更改选项的顺序,但结果\n保持不变。--invert-grep

\n
\n


ham*_*mar 17

目前还不是,虽然似乎已经讨论-v了将来支持一个选项,或者目前的git log --not工作是什么--author,--committer以及--grep.

另请参见:如何反转git log --grep模式.


mat*_*eor 14

其他一些答案引用了部分内容,但是我使用在这里看到的策略在回购中取得了成功

 git log --invert-grep --author=<pattern>
Run Code Online (Sandbox Code Playgroud)

您可以根据需要添加任意数量的作者模式。就我而言,最好的模式是完整的电子邮件,因为它是唯一的

  • 注意:这将不再有效[使用 Git 2.35+ (Q1 2022)](/sf/answers/4945101381/) (15认同)