使用gitlog时,如何按用户进行筛选,以便只看到该用户的提交?
git help log
为您提供gitlog的手册页。按/,然后键入“author”,然后按Enter键,在那里搜索“作者”。键入“n”几次以进入相关部分,其中显示:
git log --author="username"
正如已经建议的那样。
注意,这将为您提供提交的作者,但在Git中,作者可以是与提交者不同的人(例如,在Linux内核中,如果您以普通用户身份提交补丁,则可能由其他管理用户提交)?有关详细信息)
大多数时候,人们所说的用户既是提交者,也是作者。
这对gitlog和gitk都有效——这是查看历史的两种最常见的方式。您不需要使用整个名称:
git log --author="Jon"
将符合“乔纳森·史密斯”的承诺
git log --author=Jon
and
git log --author=Smith
也会起作用。如果不需要空格,引号是可选的。
如果您打算搜索所有分支,而不仅仅是当前提交的祖先,那么添加--all。
您还可以轻松匹配多个作者,因为正则表达式是此筛选器的基本机制。因此,要列出Jonathan或Adam的提交,可以执行以下操作:
git log --author="\(Adam\)\|\(Jon\)"
为了排除特定作者或一组作者使用正则表达式进行的提交(如本问题中所述),您可以结合--perl regexp开关使用负前瞻:
git log --author='^(?!Adam|Jon).*$' --perl-regexp
或者,可以使用bash和piping排除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
在github上还有一个秘密方法。。。
您可以在提交视图中通过附加param?author=github_handle。例如,链接https://github.com/dynjs/dynjs/commits/master?author=jingweno显示了Dynjs项目的提交列表
要获取更多详细信息-(此处%an指作者)
使用此项:-
git log --author="username" --pretty=format:"%h - %an, %ar : %s"
如果使用GitHub:
转到分支机构单击提交
它将以以下格式显示列表
branch_x: < comment>
author_name committed 2 days ago
看到个人作者的承诺;单击authorname,在那里您可以看到该作者在该分支上的所有提交
通过在.bashrc文件中添加这个小片段,以彩色显示x用户的n个日志。
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
要显示Frank的最后10次提交:
l 10弗兰克
要显示任何人的最后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
查找特定USERNAME的所有提交:
git log --author=USERNAME --oneline --color=never | awk '{print $1}' | xargs git show
您可以使用=或“空格”。例如,以下两个命令返回相同的
git log --author="Developer1"
git log --author "Developer1"
虽然,有很多有用的答案。然而,只是为了添加另一种方式。您也可以使用
git shortlog --author="<author name>" --format="%h %s"
它将以分组方式显示输出:
<Author Name> (5):
4da3975f dependencies upgraded
49172445 runtime dependencies resolved
bff3e127 user-service, kratos, and guava dependencies upgraded
414b6f1e dropwizard :- service, rmq and db-sharding depedencies upgraded
a96af8d3 older dependecies removed
这里,<AuthorName>在当前分支下总共完成了5次提交。然而,您也可以使用--all在git存储库中的任何地方(所有分支)强制搜索。
一个陷阱:git内部试图将输入<author-name>与git数据库中作者的姓名和电子邮件匹配。它区分大小写。
一种可能的替代方法是使用名为mergestat的工具,该工具允许您针对repo中的提交历史运行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
选择“日志”并单击“用户:全部”
然后键入作者的姓名,它将显示该作者的每一次提交
推荐文章
- 如何在git中找到原始/master的位置,以及如何更改它?
- Bower: ENOGIT Git未安装或不在PATH中
- Bitbucket上的Git:总是要求密码,即使上传了我的公共SSH密钥
- Git别名-多个命令和参数
- 如何添加一个“打开git-bash这里…”上下文菜单到windows资源管理器?
- Mercurial初学者:最终实用指南
- 是否可以在Git中只提取一个文件?
- 当我做“git diff”的时候,我怎么能得到一个并排的diff ?
- 在git中如何将提交移动到暂存区?
- 如何缩小。git文件夹
- 如何在本地删除分支?
- 找到包含特定提交的合并提交
- Windows上Git文件的权限
- 如何从一个枝头摘到另一个枝头
- 如何获得在两次Git提交之间更改的所有文件的列表?