【问题标题】:How can I get all symbolic names from a Git commit hash?如何从 Git 提交哈希中获取所有符号名称?
【发布时间】:2020-10-11 17:54:38
【问题描述】:

如果一个 Git 提交哈希有多个与之关联的标签和/或者是多个分支的头部,有没有一个好方法可以列出 所有个?

我查看了git name-revgit describegit symbolic-ref 的选项,但没有找到任何似乎可以满足我要求的选项。令人沮丧的是,git name-rev 有一个 --tags 选项来列出 only 标签,但没有明显的机制来仅列出分支(无论如何,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

【问题讨论】:

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


    【解决方案1】:

    应该可以通过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
    

    【讨论】:

      【解决方案2】:

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

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

      ErikMD's git for-each-ref suggestion 的输出格式可能更容易处理,所以这很可能是我最终会使用的。

      【讨论】:

        猜你喜欢
        • 2015-06-24
        • 2023-03-16
        • 1970-01-01
        • 2014-10-29
        • 2021-06-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-31
        相关资源
        最近更新 更多