Get Git log in JSON format
git log --pretty=format:'{%n  "commit": "%H",%n  "abbreviated_commit": "%h",%n  "tree": "%T",%n  "abbreviated_tree": "%t",%n  "parent": "%P",%n  "abbreviated_parent": "%p",%n  "refs": "%D",%n  "encoding": "%e",%n  "subject": "%s",%n  "sanitized_subject_line": "%f",%n  "body": "%b",%n  "commit_notes": "%N",%n  "verification_flag": "%G?",%n  "signer": "%GS",%n  "signer_key": "%GK",%n  "author": {%n    "name": "%aN",%n    "email": "%aE",%n    "date": "%aD"%n  },%n  "commiter": {%n    "name": "%cN",%n    "email": "%cE",%n    "date": "%cD"%n  }%n},'The only information that aren't fetched are:
- %B: raw body (unwrapped subject and body)
- %GG: raw verification message from GPG for a signed commit
The format is applied to each line, so once you get all the lines, you need to remove the trailing , and wrap them around an Array.
git log pretty format source: http://git-scm.com/docs/pretty-formats
Don't mean to add another to the pile, but here we go: https://gist.github.com/april/ee2e104b1435f3113e67663d8875bbef
This builds upon what @nsisodiya, @varemenos, and @overengineer put together, but with:
git logcan output, including the bodyjqfor pretty printing:git-log-json | jq -r '.[] | .subject'I tested it against a git repository with over a million commits without issues, but there certainly might be some.