如何根据开发者姓名在Git中获取历史记录日志?
在GitHub上,有一种“秘密”的方法可以按开发者名称筛选提交记录。只需在提交记录视图中添加参数?author=github_handle
即可。例如,链接https://github.com/dynjs/dynjs/commits/master?author=jingweno显示了Dynjs项目的一系列提交记录。
但这种方法只能在当前分支上查看提交记录,是否有办法查看所有分支上的记录呢?类似于commits/all这样的方式?
有人问道你是如何发现这个方法的?还支持哪些其他标志?
pro.mean给出了在界面上如何实现这一功能的答案:stackoverflow.com/a/39123694/1225617
但我不喜欢这个答案,因为问题与软件相关,而不是与特定服务相关。
问题只是如何查看git日志-与技术无关。所以这个答案完全符合要求。
在Git中,我们可以使用git log --author="用户名"
命令来获取某个开发者的提交历史记录。然而,有时候我们希望精确搜索某个开发者的提交历史,而不想看到其他开发者的提交记录。
要实现精确搜索,我们需要在git log
命令中添加额外的参数。具体来说,我们可以使用--author="用户名"
参数来指定要搜索的开发者名称,这样就只会显示该开发者的提交记录。
这个问题的出现原因是在获取某个开发者的提交历史记录时,可能会出现其他开发者的提交记录也被显示的情况。这可能是因为在系统中对开发者名称进行了不正确的命名。
下面是解决这个问题的方法:
git log --author="that user"
以上命令将只显示名为"that user"的开发者的提交历史记录,不会显示其他开发者的提交记录。
通过这个方法,我们可以准确地获取某个开发者的提交历史记录,而不会被其他开发者的提交记录所干扰。这对于项目管理和代码审查等工作非常有用。
如何按开发者姓名获取Git中的历史日志?
这对于查看历史的两种常见方法,即git log和gitk都适用。
您不需要使用全名:
git log --author="Jon"
将匹配由"Jonathan Smith"提交的提交
git log --author=Jon
和
git log --author=Smith
也可以工作。如果不需要空格,则引号是可选的。
如果要在存储库中搜索所有分支而不仅仅是当前提交的祖先,请添加--all。
您还可以很容易地使用多个作者的正则表达式进行匹配。因此,要列出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/
有没有办法做相反的操作?比如说-我想看到除了Jon之外的所有提交。
根据git帮助日志"Jon"是一个正则表达式,所以应该非常容易
git log --format=%an | egrep -v 'Jon*' | xargs -n 1 git log -1
糟糕...忘了。但你明白了。通过通过egrep -v的管道功能获得"不在"功能和其他命令行技巧。
在我的git实例上,我需要添加-E标志才能使上面的"多用户"示例工作。在编辑答案之前,我想确保我的经验不是独一无二的
这个命令是仅针对当前分支的提交还是整个项目的提交?整个项目会怎样?
如果您想要列出来自所有分支而不仅仅是当前提交祖先的日志,请添加--all。当您发出git log命令时,Git会隐式运行git log HEAD。
有没有办法让gitk不显示其他作者的父提交?(他们显示为白色圆圈。)相比之下,git log --graph不显示父提交;它只显示给定作者的提交。我希望在gitk中看到相同的输出。 (已检查过首选项和编辑视图-找不到有用的内容。)
另一种排除某些提交者的方法-Perl正则表达式支持"负面前瞻断言"。因此,您可以构造一个要求起始点不匹配字符串中的其他正则表达式的表达式。例如,要排除包含'Jon'的所有作者字符串:git log --author='^(?!.*Jon)' --perl-regexp
哦,刚刚注意到原始答案中还有一个变体。我真傻:-)
注意这是区分大小写的
如果要从列表中排除合并提交,请添加--no-merges。
我注意到以下语法似乎也有效:git log --author jeff(即没有等号)。
小心引号包裹的模式正则表达式。我的没有工作,因为我使用的是单引号(')而不是双引号(")。git log --author='^(?!.*Charith)' --perl-regexp
没有工作。git log --author="^(?!.*Charith)" --perl-regexp
可以工作
:我提了一个单独的问题:stackoverflow.com/questions/49219779/…