asmeurer
asmeurer

Reputation: 91610

List of authors in git since a given commit

I want a way to list all git authors that

  1. Is only since a given commit.
  2. Is unique.

These two are easy, and I've seen some solutions to this online, most using git log --format. But none that I saw fits the additional requirements:

  1. Is ordered by commit date. So if John Smith committed before Aaron Meurer, his name should appear before mine (I'm Aaron Meurer).
  2. Respects .mailmap. As far as I can tell, only git shortlog does this, and it gives a bunch of extra stuff that I don't want. But maybe I'm wrong. Or maybe those of you who are more handy with sed and friends than I am would just use that.

(by the way, how do I make Markdown not restart the numbering?)

I also want a way to order it by last name, but this is relatively easy.

Upvotes: 21

Views: 8262

Answers (2)

Thomas Decaux
Thomas Decaux

Reputation: 22691

Note for people who want "global stat":

git shortlog -s -n -e

Give the global stats commits by author.

The options mean:

  • -s / --summary: Suppress commit description and provide a commit count summary only.
  • -n / --numbered: Sort output according to the number of commits per author instead of author alphabetic order.
  • -e / --email: Show the email address of each author.

Upvotes: 39

cxreg
cxreg

Reputation: 11578

The following format specifiers will solve your second concern:

%aN: author name (respecting .mailmap)
%aE: author email (respecting .mailmap)
%cN: committer name (respecting .mailmap)
%cE: committer email (respecting .mailmap)

So discounting the duplicate author part, you want something like

git log <commit>.. --format="%aN <%aE>" --reverse

I suspect you could pipe it through something that does a hash-table based deduplication, a perl oneliner would be trivial:

git log <commit>.. --format="%aN <%aE>" --reverse | perl -e 'my %dedupe; while (<STDIN>) { print unless $dedupe{$_}++}'

Upvotes: 26

Related Questions