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

时间:2020-06-21 21:47:05

标签: git git-branch git-commit git-hash

如果Git提交哈希具有与之关联的多个标签和/或多个分支的头,是否有一种很好的方法列出所有

我已经浏览了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 个答案:

答案 0 :(得分: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 :(得分:1)

我意识到通常git log会向我显示我要查找的所有名称。查看git log的格式选项,我也可以使用:

$ git log --format='%d -1 HEAD
 (HEAD -> branch2, tag: tag2, tag: tag1, branch1)

虽然ErikMD's git for-each-ref suggestion的输出格式可能更易于处理,所以这可能是我最终将要使用的格式。

相关问题