Git Tag list, display commit sha1 hashes Git Tag list, display commit sha1 hashes git git

Git Tag list, display commit sha1 hashes


To get git tags with the SHA1 hash of the Tag object, you can run:

git show-ref --tags

The output will then look something like:

0e76920bea4381cfc676825f3143fdd5fcf8c21f refs/tags/1.0.05ce9639ead3a54bd1cc062963804e5bcfcfe1e83 refs/tags/1.1.0591eceaf92f99f69ea402c4ca639605e60963ee6 refs/tags/1.2.040414f41d0fb89f7a0d2f17736a906943c05acc9 refs/tags/1.3.0

Each line is the SHA1 hash of the tag, followed by the tag name prefixed with refs/tags/.

If you want the SHA1 hash of the commit, instead of the tag object, you can run:

git show-ref --tags -d

This will produce output like:

0e76920bea4381cfc676825f3143fdd5fcf8c21f refs/tags/1.0.03e233dd8080617685992dc6346f739a6f6396aae refs/tags/1.0.0^{}5ce9639ead3a54bd1cc062963804e5bcfcfe1e83 refs/tags/1.1.009173980152a7ed63d455829553448ece76c6fdc refs/tags/1.1.0^{}591eceaf92f99f69ea402c4ca639605e60963ee6 refs/tags/1.2.056d803caaa8a93a040b7be0b8a36abdc4ce8c509 refs/tags/1.2.0^{}40414f41d0fb89f7a0d2f17736a906943c05acc9 refs/tags/1.3.01bdf628a70fda7a0d840c52f3abce54b1c6b0130 refs/tags/1.3.0^{}

The lines ending with ^{} start with the SHA1 hash of the actual commit that the tag points to.


The git tag command is underdeveloped. A lot is desired but missing in it, like full tag details and tags in the commit history order.

I like this instead, which gives exactly what I want but can't get from git tag:

git log --oneline --decorate --tags --no-walk

This gives a very nice color-coded view of the tags in the reverse chronological order (as it would be in the full log). That way, not only do you see the tags, you will also see the abbreviated hashes and the commit messages of the tag commits.


I have aliased it to git t and git tags as follows:

git config --global alias.tags "log --oneline --decorate --tags --no-walk"git config --global alias.t "!git tags"

Note: I had to use bash redirection for git t as Git doesn't support calling an alias from another alias (which is a bummer).


If you want to see the commit date and time, try:

git log --tags --no-walk --date=iso-local --pretty='%C(auto)%h %cd%d %s'

You can use other date formats in the --date option as well as fully control the output to match your unique taste in the --pretty option. Both options are well-documented in the git-log Documentation.


Annotated tags have their own SHA−1, so we need to dereference them. Howeverlightweight tags cannot be dereferenced, as they already point to a commit. Tosolve, we must list both and filter the commit objects:

git for-each-ref --sort -v:refname --format '%(objectname) %(objecttype) %(refname)%(*objectname) %(*objecttype) %(*refname)' refs/tags | grep commit

Result with lightweight tags:

589610a0114a375f1bff716dd308cf8df08571d3 commit refs/tags/1.4.9e25952a74bf379783944bef9c4fcc60600cb764c commit refs/tags/1.4.819b1c2c96a9678837f57eac86cf3d22842731510 commit refs/tags/1.4.77208212a55c4a56af34da781a7f730d6ddd557a1 commit refs/tags/1.4.662ec20337a4125496bd4f56288f3283963153194 commit refs/tags/1.4.5

Result with annotated tags:

e2b2d6a172b76d44cb7b1ddb12ea5bfac9613a44 commit refs/tags/v2.11.0-rc3^{}1310affe024fba407bff55dbe65cd6d670c8a32d commit refs/tags/v2.11.0-rc2^{}3ab228137f980ff72dbdf5064a877d07bec76df9 commit refs/tags/v2.11.0-rc1^{}1fe8f2cf461179c41f64efbd1dc0a9fb3b7a0fb1 commit refs/tags/v2.11.0-rc0^{}454cb6bd52a4de614a3633e4f547af03d5c3b640 commit refs/tags/v2.11.0^{}