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): ```sh $ git log --format='%aN' | sort -u ``` **Example output:** Jane Bar John Foo Steve Baz


### List total commits by author (sorted by commit count): ```sh $ git shortlog -sn ``` **Example output:** 136 Jane Bar 41 John Foo 17 Steve Baz #### Ignore merge commits: ```sh $ 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: ```sh $ 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: ```sh $ 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: ```sh $ 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`: ```sh $ 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 ... ```