Skip to content

Instantly share code, notes, and snippets.

@vmandic
Forked from eyecatchup/git-commit-log-stats.md
Created February 13, 2018 14:11
Show Gist options
  • Save vmandic/ac6011a79194d0e46fcf207d2abae61f to your computer and use it in GitHub Desktop.
Save vmandic/ac6011a79194d0e46fcf207d2abae61f to your computer and use it in GitHub Desktop.
Some commands to get git commit log statistics for a repository on the command line.

git commit stats

Commands to get commit statistics for a Git repository from the command line -
using git log, git shortlog and friends.




List repository contributors by author name (sorted by name):

$ git log --format='%aN' | sort -u 

Example output:

Jane Bar
John Foo
Steve Baz



List total commits by author (sorted by commit count):

$ git shortlog -sn

Example output:

136 Jane Bar
 41 John Foo
 17 Steve Baz

Ignore merge commits:

$ git shortlog -sn --no-merges

Example output:

121 Jane Bar
 36 John Foo
 14 Steve Baz

Even though the --no-merges option is not documented for git shortlog, it works exactly as defined for git log.




List file change stats by author:

$ git log --author="Vorname Nachname" --pretty=tformat: --numstat | awk '{inserted+=$1; deleted+=$2; delta+=$1-$2; ratio=deleted/inserted} END {printf "Commit stats:\n- Lines added (total)....  %s\n- Lines deleted (total)..  %s\n- Total lines (delta)....  %s\n- Add./Del. ratio (1:n)..  1 : %s\n", inserted, deleted, delta, ratio }' -

Example output:

Commit stats:
- Lines added (total)....  4625
- Lines deleted (total)..  836
- Total lines (delta)....  3789
- Add./Del. ratio (1:n)..  1 : 0.180757

Include file count:

$ git log --shortstat --author="Vorname Nachname" | grep -E "fil(e|es) changed" | awk '{files+=$1; inserted+=$4; deleted+=$6; delta+=$4-$6; ratio=deleted/inserted} END {printf "Commit stats:\n- Files changed (total)..  %s\n- Lines added (total)....  %s\n- Lines deleted (total)..  %s\n- Total lines (delta)....  %s\n- Add./Del. ratio (1:n)..  1 : %s\n", files, inserted, deleted, delta, ratio }' -

Example output:

Commit stats:
- Files changed (total)..  439
- Lines added (total)....  4625
- Lines deleted (total)..  836
- Total lines (delta)....  3789
- Add./Del. ratio (1:n)..  1 : 0.180757

Ignore merge commits:

Note: Both commands above also count merge commits. But to ignore them, one can simply use the --no-merges option again:

$ git log --author="Vorname Nachname" --pretty=tformat: --numstat --since="1 Jan, 2015" | awk ...
# or
$ git log --shortstat --author="Vorname Nachname" --since="1 Jan, 2015" | grep -E ...

Filter stats by date:

You can filter the output of the above commands, for example, by adding --until or --since or --before:

$ git log --author="Vorname Nachname" --pretty=tformat: --numstat --since="1 Jan, 2015" | awk ...
# or
$ git log --shortstat --author="Vorname Nachname" --since="1 Jan, 2015" | grep -E ...






@aar-ish
Copy link

aar-ish commented Feb 12, 2024

Hey, Thanks for these commands!
I had 1 question though,
$ git log --shortstat --author="Vorname Nachname" --since="1 Jan, 2015" | grep -E ...
Does this command give stats for the develop/main branch or the user's created branch?

@magicwenli
Copy link

Hey, Thanks for these commands! I had 1 question though, $ git log --shortstat --author="Vorname Nachname" --since="1 Jan, 2015" | grep -E ... Does this command give stats for the develop/main branch or the user's created branch?

I think the above commands git log and git shortlog should only count on the current branch, so the answer is that other branches (such as dev) will not be counted.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment