Git oneline summary with stat
2026-10-20 · 1 min read
glog() {
git log --pretty=format:'@%h %s' --numstat "$@" | awk -F'\t' '
function w(v, m) { return length(v) > m ? length(v) : m }
function flush() {
if (h == "") return
n++; H[n] = h; A[n] = "+" a; D[n] = "-" d; S[n] = s
wh = w(h, wh); wa = w(A[n], wa); wd = w(D[n], wd)
}
/^@/ { flush(); i = index($0, " "); h = substr($0, 2, i - 2); s = substr($0, i + 1); a = d = 0; next }
NF == 3 { a += $1; d += $2; ta += $1; td += $2 }
END {
flush()
if (!n) exit
wa = w("+" ta, wa); wd = w("-" td, wd)
fmt = "\033[33m%-" wh "s\033[0m \033[32m%" wa "s\033[0m \033[31m%" wd "s\033[0m %s\n"
for (i = 1; i <= n; i++) printf fmt, H[i], A[i], D[i], S[i]
printf "\n" fmt, "", "+" ta, "-" td, "\033[1mTotal (" n " commits)\033[0m"
}' | less -RFX
}