获取git当前分支/标记名称

时间:2013-09-06 13:48:45

标签: git branch git-branch git-checkout

如何获取工作副本的当前分支或标记名称?我已经看到指示rev-parse --abbrev-ref HEAD将给出分支名称的引用,但是如果checkout是标记,则这不起作用,在这种情况下它只返回'HEAD'。我需要以某种方式获取这些修订的标记名称。

要清楚,我想要两个可能的名字之一:

  1. 如果当前结帐是分支的HEAD,我想要分支名称
  2. 如果它是一个分离的HEAD,我想要标签名称(假设有一个标签)

3 个答案:

答案 0 :(得分:48)

我想你想要这个:

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

如果它没有分离,那么它将输出HEAD的值,或者如果它是完全匹配则发出标记名称。否则它会显示错误。

答案 1 :(得分:3)

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

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

答案 2 :(得分:1)

此命令可以按以下优先级打印名称: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的评论。我每隔几个月就会反复提出这个问题,而这就是我最终得到的答案,所以我认为我会发布它。