如何从Git提交哈希中获取所有符号名称?

8
如果一个Git commit hash与多个标签相关联并且/或者是多个分支的head,有没有好的方法可以列出它们所有
我查看了git name-revgit describegit symbolic-ref的选项,但没有找到任何能够实现我要求的选项。令人沮丧的是,git name-rev有一个--tags选项来仅列出标签,但似乎没有机制仅列出分支(而且对于我来说,git name-rev总是优先选择标签)。
$ 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

将提交哈希值映射到其所有符号名称,需要运行git tag --listgit branch --all --list,然后在所有结果上运行git rev-parse吗?
2个回答

7

通过使用git for-each-ref命令,您应该能够实现所需的操作:

git for-each-ref --points-at=HEAD

完整的示例会话:

$ 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

1
我意识到通常情况下,git log 会显示我正在查找的所有名称。查看 git log 的格式选项,我可以选择使用以下命令:
$ git log --format='%d -1 HEAD
 (HEAD -> branch2, tag: tag2, tag: tag1, branch1)

ErikMD的git for-each-ref建议输出的格式可能更容易处理,所以我最终可能会使用它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接