8

如果 Git 提交哈希有多个与之关联的标签和/或是多个分支的负责人,是否有列出所有这些标签的好方法?

我查看了 、 和 的选项,git name-rev但没有找到任何似乎可以满足我要求的选项。令人沮丧的是,可以选择列出标签,但没有明显的机制来仅列出分支(无论如何,我似乎总是更喜欢标签而不是分支)。git describegit symbolic-refgit name-rev--tagsgit 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 --list然后git branch --all --list运行git rev-parse所有结果吗?

4

2 回答 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
于 2020-06-21T22:06:17.527 回答
1

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

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

不过, ErikMDgit for-each-ref建议的输出格式可能更容易处理,所以这很可能是我最终会使用的。

于 2020-06-22T02:47:45.673 回答