Show sha1 only with git log

GitBash

Git Problem Overview


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 <markamery@notmyrealemail.com>
Date:   Wed Jan 1 21:35:07 2014 +0000

    Yet another commit message
    
    This one even has newlines.

commit 4390ee9f4428c84bdbeb2fed0a461099a6c81b39
Author: Mark Amery <markamery@notmyrealemail.com>
Date:   Wed Jan 1 21:30:19 2014 +0000

    Second commit message.

commit bff53bfbc56485c4c1007b0884bb1c0d61a1cf71
Author: Mark Amery <markamery@notmyrealemail.com>
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?

Git Solutions


Solution 1 - Git

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 -S.

Solution 2 - Git

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

Solution 3 - Git

If you want to see only the latest one

git rev-list HEAD | head -1

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionMark AmeryView Question on Stackoverflow
Solution 1 - GitMark AmeryView Answer on Stackoverflow
Solution 2 - GitMagnus BäckView Answer on Stackoverflow
Solution 3 - GitRoman ParfinenkoView Answer on Stackoverflow