Show sha1 only with git log
I want to write a Bash script that loops over the sha1s of commits output by an invocation of
git log. However,
git log gives me much more output than I want:
commit 0375602ba2017ba8750a58e934b41153faee6fcb Author: Mark Amery <firstname.lastname@example.org> Date: Wed Jan 1 21:35:07 2014 +0000 Yet another commit message This one even has newlines. commit 4390ee9f4428c84bdbeb2fed0a461099a6c81b39 Author: Mark Amery <email@example.com> Date: Wed Jan 1 21:30:19 2014 +0000 Second commit message. commit bff53bfbc56485c4c1007b0884bb1c0d61a1cf71 Author: Mark Amery <firstname.lastname@example.org> Date: Wed Jan 1 21:28:27 2014 +0000 First commit message.
How can I get
git log to just output sha1s so that I can loop over them conveniently?
2 Solutions collect form web for “Show sha1 only with git log”
An alternative to
git log --format is the
git rev-list plumbing command. For scripting purposes it’s the recommended choice as the interface can be relied on to be stable (although for simple uses like this I’d be surprised if
git log isn’t sufficiently stable).
for sha1 in $(git rev-list HEAD) ; do : # Do something with $sha1 done
You can use the
--format argument with a custom format that only includes the sha1:
git log --format=format:%H
The above command yields output like the following:
0375602ba2017ba8750a58e934b41153faee6fcb 4390ee9f4428c84bdbeb2fed0a461099a6c81b39 bff53bfbc56485c4c1007b0884bb1c0d61a1cf71
You can loop over the commit hashes in Bash like this:
for sha1 in $(git log --format=format:%H); do : # Do something with $sha1 done
This is slightly more verbose than using
git rev-list, but may be your only option if you want to use ordering or filtering arguments for
git log that are not supported by
git rev-list, like