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


Answers:


1713

这适用于git loggitk-两种最常见的查看历史记录方式。
您不需要使用全名:

git log --author="Jon"

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

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和管道排除由亚当创作的提交:

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/


9
有没有办法做相反的事情?说-我想查看除Jon之外的所有提交。
伊恩·罗宾逊

4
@Ian对于git help log“ Jon”是一个正则表达式,因此它应该非常简单
sumek 2011年

2
git log --format =%an | egrep -v'乔恩*'| xargs -n 1 git log -1
Adam Dymitruk 2011年

4
有什么办法可以gitk排除其他作者的父提交?(它们用白色圆圈显示。)相反,git log --graph不显示父提交。它仅显示给定作者的提交。我希望在中看到相同的输出gitk(已经检查了“首选项”和“编辑视图”-找不到有用的东西。)
ADTC,2016年

2
当心这是区分大小写的
Chiel 10 Brinke


44

在github上还有一个秘密的方法...

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


1
有什么办法可以看到分支机构吗?像提交/全部?
发狂

您是怎么找到这个的?还支持哪些其他标志?
Woodrow Barlow

1
pro.mean的答案如何通过该接口执行此操作:stackoverflow.com/a/39123694/1225617
Adam Millerchip

我不喜欢这个答案,因为这个问题与软件有关,与特定服务无关。
Valerio Bozz

问题是,只是如何查看日志的git -与技术无关。因此,此答案非常合适。
洛特

31
git help log

给你git log的手册页。通过按/,然后键入“作者”,然后按Enter,在此处搜索“作者”。多次键入“ n”以转到相关部分,其中显示:

git log --author="username"

正如已经建议的那样。

请注意,这将为您提供提交的作者,但是在Git中,作者可以是与提交者不同的人(例如,在Linux内核中,如果您以普通用户身份提交补丁,则它可能是由另一个管理用户提交的。 。)看到Git中作者和提交者之间的区别?更多细节)

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


21
@James我认为您在这里的否定性是不必要的。我只是想教他如何在命令行中查找它,以防万一他忘记了。我认为您误会了一个只说RTFM的人,但我在回答中加入了答案。
ustun 2013年

11
这不是消极情绪。这是事实,人们来到这里寻求建议,很多人想用一些RTFM来回应。预示着社区的穷人。
詹姆斯

11
@詹姆斯,我必须在这里同意ustun。他确实回答了问题,并且提供了一种找到答案的策略,这有助于找到其他与git相关的问题的答案。
彼得

4
我认为这不是黑白的。现在,我很震惊地同意我们应该教育人们如何为自己做事-这是一个好主意。不耐烦稍微出错的地方在于以下假设:a)OP知道如何搜索手册页,更重要的是b)OP知道要搜索“作者”。他们可能搜索了“ committer”或“ name”之类的东西。
约翰·亨特

6
@JohnHunt你是对的,我从来没有想过要解释搜索的含义以及当时的搜索方式。有点假设。稍微固定文本。
ustun

23

详细信息-(此处%an指作者)

用这个 :-

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

如果你希望自己的电子邮件地址使用的格式%ae,而不是%an(这给了名称。)
MarkHu

--author实际上是按作者名称而不是提交者名称进行搜索。我会更改"username"为作者
算法式



12

您甚至可以简单地使用一部分用户名来缩写一下:

git log --author=mr  #if you're looking for mrfoobar's commits

11

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

用法

```bash
$ 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

6

由于另一个问题(可能是错误地错了?)被锁定,因此我将其放在这里:

向作者显示提交计数:

git shortlog -nse

查找特定USERNAME的所有提交:

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

5

通过在.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 frank

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

l 20


4

如果使用GitHub:

  • 去分支
  • 点击提交

它将以以下格式显示列表

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

2
这是很多点击,并假设托管git repo。不像上面的许多操作那样回答CLI。
lacostenycoder '16

1
@lacostenycoder,但是它是有用的信息,尤其是在GitHub上有很多git项目时!
亚当·米勒基普

2

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

git log --author="Developer1"

git log --author "Developer1"


1

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

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

在此,<Author Name>当前分支下总共执行了5次提交。而您也可以在git存储库中的所有位置(所有分支)--all强制执行搜索。

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.