如何查看只有一个用户提交的git日志?

使用git log时,如何按用户过滤以仅看到来自该用户的提交?

717523 次浏览
git log --author="that user"
git help log

给你git日志的manpage。按/搜索“作者”,然后输入“作者”,然后输入回车键。输入“n”几次即可进入相关部分,结果显示:

git log --author="username"

如前所述。

请注意,这将为您提供提交的作者,但在Git中,作者可以是与提交者不同的人(例如在Linux内核中,如果您以普通用户身份提交补丁,则可能由另一个管理用户提交。

大多数情况下,用户既是提交者又是作者。

这适用于git loggitk——两种最常见的查看历史的方式。
您不需要使用整个名称:

git log --author="Jon"

将与“乔纳森史密斯”的承诺相匹配

git log --author=Jon

git log --author=Smith

如果不需要空格,引号是可选的。

如果您打算搜索所有分支,而不仅仅是存储库中当前提交的祖先,请添加--all

您还可以轻松匹配多个作者,因为regex是此过滤器的底层机制。因此,要列出Jonathan或Adam的提交,您可以这样做:

git log --author="\(Adam\)\|\(Jon\)"

为了排除特定作者或一组作者使用正则表达式的提交,如在这个问题所示,您可以将消极前瞻--perl-regexp开关结合使用:

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

或者,您可以通过使用bash和管道来排除Adam撰写的提交:

git log --format='%H %an' |grep -v Adam |cut -d ' ' -f1 |xargs -n1 git log -1

如果您想排除Adam提交(但不一定是作者)的提交,请将%an替换为%cn。有关此的更多详细信息,请参阅我的博客文章:http://dymitruk.com/blog/2012/07/18/filtering-by-author-name/

您甚至可以通过简单地使用部分用户名来缩写它:

git log --author=mr  #if you're looking for mrfoobar's commits
cat | git log --author="authorName" > author_commits_details.txt

这将以文本格式提供您的提交。

在github上也有秘密的方式…

您可以通过附加参数?author=github_handle在提交视图中按作者过滤提交。例如,链接https://github.com/dynjs/dynjs/commits/master?author=jingweno显示了对Dyjs项目的提交列表

获取更多细节-(这里%an指的是作者)

使用这个:-

git log --author="username" --pretty=format:"%h - %an, %ar : %s"

如果使用GitHub:

  • 转到分支
  • 点击提交

它将以以下格式显示列表

branch_x: < comment>author_name committed 2 days ago
  • 要查看单个作者的提交;单击author_name,您可以在该分支上看到该作者的所有提交

如果您想过滤自己的提交:

git log --author="<$(git config user.email)>"

通过在. bashrc文件中添加这个小片段,以彩色显示x用户的n个日志。

gitlog() {if [ "$1" ] && [ "$2" ]; thengit log --pretty=format:"%h%x09 %C(cyan)%an%x09 %Creset%ad%x09 %Cgreen%s" --date-order -n "$1" --author="$2"elif [ "$1" ]; thengit log --pretty=format:"%h%x09 %C(cyan)%an%x09 %Creset%ad%x09 %Cgreen%s" --date-order -n "$1"elsegit log --pretty=format:"%h%x09 %C(cyan)%an%x09 %Creset%ad%x09 %Cgreen%s" --date-orderfi}
alias l=gitlog

显示Frank的最后10次提交:

l 10 frank

要显示任何人的最后20次提交:

l 20

试试这个工具https://github.com/kamranahmedse/git-standup

用法

$ git standup [-a <author name>][-w <weekstart-weekend>][-m <max-dir-depth>][-f][-L][-d <days-ago>][-D <date-format>][-g][-h]

下面是每个旗帜的描述

- `-a`      - Specify author to restrict search to (name or email)- `-w`      - Specify weekday range to limit search to (e.g. `git standup -w SUN-THU`)- `-m`      - Specify the depth of recursive directory search- `-L`      - Toggle inclusion of symbolic links in recursive directory search- `-d`      - Specify the number of days back to include- `-D`      - Specify the date format for "git log" (default: relative)- `-h`      - Display the help screen- `-g`      - Show if commit is GPG signed or not- `-f`      - Fetch the latest commits beforehand

由于另一个问题被(可能是错误的)锁定了,我将把它放在这里:

向作者显示他们的提交计数:

git shortlog -nse

查找特定用户名的所有提交:

git log --author=USERNAME --oneline --color=never | awk '{print $1}' | xargs git show

您可以使用=或“空间”。例如,以下两个命令返回相同的

git log --author="Developer1"
git log --author "Developer1"

我的案例:我正在使用源代码树,我遵循以下步骤:

  1. CRL+3
  2. 更改了下拉列表作者
  3. 输入名字“Vinod Kumar”

在此处输入图片描述

虽然,有许多有用的答案。然而,只是为了添加另一种方式。您也可以使用

git shortlog --author="<author name>" --format="%h %s"

它将以分组方式显示输出:

<Author Name> (5):4da3975f dependencies upgraded49172445 runtime dependencies resolvedbff3e127 user-service, kratos, and guava dependencies upgraded414b6f1e dropwizard :- service, rmq and db-sharding depedencies upgradeda96af8d3 older dependecies removed

在这里,<Author Name>在当前分支下总共完成了5次提交。然而,您还可以使用--all在git存储库中的(所有分支)处强制搜索。

一个陷阱: git在内部尝试将输入<author name>与git数据库中作者的姓名和电子邮件匹配。它是区分大小写

一种可能的替代方法是使用名为梅斯达的工具,它允许您对存储库中的提交历史记录运行SQL查询(除其他外)。

mergestat "SELECT * FROM commits WHERE author_name LIKE '%Jon%'"

它有点冗长,但可以提供灵活性,以通用的方式找到您要寻找的内容。

例如,过滤掉合并提交并仅显示过去一年中来自特定作者的提交:

mergestat "SELECT * FROM commits WHERE author_name LIKE '%Jon%' WHERE author_when > DATE('now', '-1 year') AND parents < 2"

完整披露:我是项目的维护者:)

如果您使用IntelliJ,您可以访问

View -> Tool Windows -> Git

选择“日志”并单击“用户:全部”

输入图片描述

输入图片描述

然后键入作者的名字,它会显示这个作者的每一个提交