Skip to content

Instantly share code, notes, and snippets.

@xeoncross
Created November 5, 2012 21:35
Show Gist options
  • Save xeoncross/4020489 to your computer and use it in GitHub Desktop.
Save xeoncross/4020489 to your computer and use it in GitHub Desktop.
Git - calculate how many lines of code were added/changed by someone
# Run this in the project repo from the command-line
# http://stackoverflow.com/a/4593065/99923
git log --shortstat --author "Xeoncross" --since "2 weeks ago" --until "1 week ago" | grep "files changed" | awk '{files+=$1; inserted+=$4; deleted+=$6} END {print "files changed", files, "lines inserted:", inserted, "lines deleted:", deleted}'
@xresch
Copy link

xresch commented Feb 16, 2022

@neuged: Changes to your command:

  • Added missing asterisk to egrep
  • added since and until parameters
git log --shortstat --author "username"  --since "5 days ago" --until "today" \
    | egrep "file[s]* changed" \
    | sed 's/changed, \([0-9]\+ deletions\)/changed, 0 insertions(+), \1/g' \
    | awk '{files+=$1; inserted+=$4; deleted+=$6} END {print "files changed", files, "lines inserted:", inserted, "lines deleted:", deleted}'

@RobinBastiaan
Copy link

How do I make an alias of this? Because we use both ' and ", I do not know a syntax to get a valid command. This is what I have now:

git config --global alias.my-contribution "!git log ..."

@fedemengo
Copy link

building on the previous solutions, if you want to skip certain files you can add -- ':!pattern'

git log --stat 0000000..HEAD -- ':!*test.go' | rg "files changed" | awk ...

@FL33TW00D
Copy link

FL33TW00D commented Jul 2, 2024

Alias for ZSH folks:

alias pastmonth="git log --shortstat --author \"FL33TW00D\" --since \"31 days ago\" --until \"today\" | \
  grep -E \"file[s]* changed\" | \
  sed -E 's/changed, ([0-9]+) deletions/changed, 0 insertions(+), \1 deletions/g' | \
  awk '{files+=\$1; inserted+=\$4; deleted+=\$6} END {print \"files changed\", files, \"lines inserted:\", inserted, \"lines deleted:\", deleted}'"

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