If a Git commit hash has multiple tags associated with it and/or is the head of multiple branches, is there a good way to list all of them?
I've looked through the options to git name-rev, git describe, and git symbolic-ref but haven't found any options that seem to do what I want. Frustratingly, git name-rev has a --tags option to list only tags but no apparent mechanism to list only branches (and git name-rev always seems to prefer tags over branches for me anyway).
$ git checkout -b branch1
$ git checkout -b branch2
$ git tag tag1
$ git tag tag2
$ git name-rev HEAD
HEAD tags/tag1
$ git describe --all HEAD
HEAD tags/tag1
$ git symbolic-ref HEAD
refs/heads/branch2
To map a commit hash to all of its symbolic names, will I need to run git tag --list and git branch --all --list and then run git rev-parse on all of the results?
It should be possible to achieve what you want thanks to the git for-each-ref command:
git for-each-ref --points-at=HEAD
Complete example session:
$ git init
$ touch a
$ git add a
$ git commit -m a
[master (root-commit) eb3222d] a
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 a
$ git checkout -b branch1
Switched to a new branch 'branch1'
$ git checkout -b branch2
Switched to a new branch 'branch2'
$ git tag tag1
$ git tag tag2
$ git tag -a tag3 -m "annotated tag"
$ git for-each-ref --points-at=HEAD
eb3222db1821633a54ccd0a6434e883c4cb71b98 commit refs/heads/branch1
eb3222db1821633a54ccd0a6434e883c4cb71b98 commit refs/heads/branch2
eb3222db1821633a54ccd0a6434e883c4cb71b98 commit refs/heads/master
eb3222db1821633a54ccd0a6434e883c4cb71b98 commit refs/tags/tag1
eb3222db1821633a54ccd0a6434e883c4cb71b98 commit refs/tags/tag2
0dbba96f519c2ad1b470f97171230004addff896 tag refs/tags/tag3
I realized that normally git log shows me all of the names that I'm looking for. Looking at git log's formatting options, I alternatively could use:
$ git log --format='%d -1 HEAD
(HEAD -> branch2, tag: tag2, tag: tag1, branch1)
The formatting of the output from ErikMD's git for-each-ref suggestion probably is easier to deal with though, so that's likely what I'll end up using.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With