获取git当前分支/标记名

获取git当前分支/标记名,git,branch,git-branch,git-checkout,Git,Branch,Git Branch,Git Checkout,如何获取工作副本的当前分支或标记名?我见过一些引用指出,rev parse--abbrev ref HEAD将给出分支名称,但是如果签出是一个标记,那么这就不起作用了,在这种情况下,它只返回“HEAD”。我需要以某种方式获得这些修订的标签名 为了清楚起见,我想要两个可能的名字中的一个: 如果当前签出是分支的头,我需要分支名称 如果它是一个分离的头部,我想要标签名(假设有标签) 我想你想要这个: git symbolic-ref -q --short HEAD || git describe --

如何获取工作副本的当前分支或标记名?我见过一些引用指出,
rev parse--abbrev ref HEAD
将给出分支名称,但是如果签出是一个标记,那么这就不起作用了,在这种情况下,它只返回“HEAD”。我需要以某种方式获得这些修订的标签名

为了清楚起见,我想要两个可能的名字中的一个:

  • 如果当前签出是分支的头,我需要分支名称
  • 如果它是一个分离的头部,我想要标签名(假设有标签)
  • 我想你想要这个:

    git symbolic-ref -q --short HEAD || git describe --tags --exact-match
    

    如果未分离,则输出HEAD的值;如果完全匹配,则输出标记名。否则将显示错误。

    此命令可以按此优先级打印名称:
    标记
    分支
    提交

    git describe --tags --exact-match 2> /dev/null \
      || git symbolic-ref -q --short HEAD \
      || git rev-parse --short HEAD
    

    此命令可以按此优先级打印名称:
    branch
    tag
    commit id

    git symbolic-ref --short -q HEAD \
      || git describe --tags --exact-match 2> /dev/null \
      || git rev-parse --short HEAD
    

    合并了@xiaohui zhang的回答和@thisismydesign的评论。我每隔几个月就会回到这个问题上来,这是我最后得到的答案,所以我想我会把它贴出来。

    可能是@FelixKling的重复,这个问题实际上是为了得到一个统一的结果。如果您碰巧签出了一个具有标记的分支,那么另一个方法只会给出标记。因此,问题包括如何确定它是否确实是一个分离的头部/标签修订。这是怎么回事?如果一个分支指向一个标记,并且您执行了
    git checkout branch
    操作,则此命令将返回该标记。我认为正确的顺序是
    branch
    ->
    tag
    ,正如@John Szakmeister的回答一样,这在两种情况下都很好(检查分支和标记)。我正在尝试找出在什么情况下会返回标记名。我的意思是,不是每个标记都只是某个分支(无论是主分支还是其他分支)上的标记。这个git命令总是首先返回分支,那么为什么它会返回标记呢?分支指的是提交,标记指的是提交。如果分支和标记都引用当前签出的提交,那么这将返回分支。如果当前签出的提交具有标记,但没有分支,则将返回标记。如果当前签出的提交没有分支或标记,则将返回提交ID。