如何查看特定用户的Git提交日志

如何查看特定用户的Git提交日志

技术背景

在使用Git进行项目管理时,有时需要查看特定用户的提交日志,以便了解该用户对项目的贡献、跟踪问题或进行代码审查。Git提供了多种方法来实现这一需求。

实现步骤

使用git log --author命令

可以使用git log --author命令来过滤特定用户的提交日志。不需要使用完整的用户名,部分匹配即可。例如:

1
git log --author="Jon"

此命令将匹配由 “Jonathan Smith” 所做的提交。也可以省略引号:

1
2
git log --author=Jon
git log --author=Smith

如果要搜索所有分支而不仅仅是当前提交的祖先,可以添加--all选项:

1
git log --author="Jon" --all

匹配多个作者

可以使用正则表达式来匹配多个作者。例如,列出由Jonathan或Adam所做的提交:

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

排除特定作者的提交

使用正则表达式和--perl-regexp开关可以排除特定作者的提交:

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

或者使用bash和管道:

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

如果要排除由Adam提交(但不一定是作者)的提交,将%an替换为%cn

在GitHub上过滤提交

在GitHub的提交视图中,可以通过附加参数?author=github_handle来按作者过滤提交。例如:

1
https://github.com/dynjs/dynjs/commits/master?author=jingweno

显示更多详细信息

使用--pretty=format选项可以显示更多详细信息:

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

过滤自己的提交

可以使用以下命令过滤自己的提交:

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

显示作者及其提交计数

1
git shortlog -nse

查找特定用户的所有提交

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

将提交保存到文本文件

1
cat | git log --author="authorName" > author_commits_details.txt

使用git standup工具

可以使用git standup工具来查看特定作者的提交:

1
2
3
4
5
6
7
8
9
$ git standup [-a <author name>] 
[-w <weekstart-weekend>]
[-m <max-dir-depth>]
[-f]
[-L]
[-d <days-ago>]
[-D <date-format>]
[-g]
[-h]

各选项说明:

  • -a:指定要搜索的作者(姓名或电子邮件)
  • -w:指定工作日范围以限制搜索
  • -m:指定递归目录搜索的深度
  • -L:在递归目录搜索中包含符号链接
  • -d:指定要包含的天数
  • -D:指定git log的日期格式(默认:相对日期)
  • -h:显示帮助屏幕
  • -g:显示提交是否已进行GPG签名
  • -f:预先获取最新的提交

使用git shortlog

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

此命令将以分组方式显示输出。可以使用--all选项在所有分支中搜索。

使用mergestat工具

mergestat可以让你对仓库中的提交历史运行SQL查询。例如:

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

过滤掉合并提交并仅显示特定作者在过去一年中的提交:

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

在SourceTree中查看

如果使用SourceTree,可以按以下步骤操作:

  1. 按下CRL+3
  2. 更改下拉作者列表。
  3. 输入作者姓名。

核心代码

自定义gitlog函数

.bashrc文件中添加以下代码:

1
2
3
4
5
6
7
8
9
10
11
gitlog() {
if [ "$1" ] && [ "$2" ]; then
git log --pretty=format:"%h%x09 %C(cyan)%an%x09 %Creset%ad%x09 %Cgreen%s" --date-order -n "$1" --author="$2"
elif [ "$1" ]; then
git log --pretty=format:"%h%x09 %C(cyan)%an%x09 %Creset%ad%x09 %Cgreen%s" --date-order -n "$1"
else
git log --pretty=format:"%h%x09 %C(cyan)%an%x09 %Creset%ad%x09 %Cgreen%s" --date-order
fi
}

alias l=gitlog

使用示例:

1
2
l 10 frank  # 显示Frank的最后10条提交
l 20 # 显示任何人的最后20条提交

最佳实践

  • 在使用--author选项时,尽量使用完整的姓名或电子邮件地址,以避免匹配到不相关的作者。
  • 如果需要频繁查看特定用户的提交,可以将自定义函数添加到.bashrc.zshrc文件中,以便快速使用。
  • 在使用正则表达式时,要注意语法的正确性,避免出现错误的匹配结果。

常见问题

  • 大小写敏感问题:Git在匹配作者姓名时是大小写敏感的。确保输入的作者姓名大小写正确。
  • 正则表达式错误:如果正则表达式使用不当,可能会导致匹配结果不符合预期。在使用正则表达式时,建议先在测试环境中进行验证。

如何查看特定用户的Git提交日志
https://119291.xyz/posts/how-to-view-git-log-of-one-users-commits/
作者
ww
发布于
2025年5月27日
许可协议