Commands to get commit statistics for a Git repository from the command line -
using git log, git shortlog and friends.
$ git log --format='%aN' | sort -u Example output:
Jane Bar
John Foo
Steve Baz
$ git shortlog -snExample output:
136 Jane Bar
41 John Foo
17 Steve Baz
$ git shortlog -sn --no-mergesExample 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.
$ 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
$ 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
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 ...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 ...
I wanted to suggest an additional option through a tool called
mergestatto also display some of these stats (full disclosure, I'm the creator/maintainer), via a SQL interface.For example, a SQL query like the following will show commit stats by author, similar to the
List file change stats by authorsection above.It can be amended to filter out merge commits or to limit the date range via
WHEREclause conditions:There are some other tables available as well, and since the input is just SQL, it's fairly flexible to tailor a query to meet specifically what you're looking for (break out by file name, filter out certain authors, etc)