确定是否使用git签出了分支或标记

确定是否使用git签出了分支或标记,git,Git,在脚本中,我想确定是否签出了标记或分支 目前,我有: git describe --tags 它将显示标记名,但如果我们在分支上,它将引发错误(返回状态!=0): 我可以依靠这种行为吗?或者有更好/更正式的方法吗 是否有一些我应该知道的未被此方法捕获的案例?git status(或git branch)以了解您所在的分支。 注意:您始终在分支上:默认分支是主分支 使用git-tag了解当前分支上的标记列表。经过一些测试,结果证明git-descripe--tags不是很可靠(有一次我签出了一个

在脚本中,我想确定是否签出了标记或分支

目前,我有:

git describe --tags
它将显示标记名,但如果我们在分支上,它将引发错误(返回状态!=
0
):

我可以依靠这种行为吗?或者有更好/更正式的方法吗


是否有一些我应该知道的未被此方法捕获的案例?

git status(或git branch)以了解您所在的分支。 注意:您始终在分支上:默认分支是主分支


使用git-tag了解当前分支上的标记列表。

经过一些测试,结果证明
git-descripe--tags
不是很可靠(有一次我签出了一个分支,它确实返回了一些东西)

我最终使用了:

git branch | grep '^*'
这将返回所选的分支。如果我签出了一个标记,将返回:

* (no branch)

在我的脚本中,我解析字符串以检查它是否包含
(无分支)

您可以使用
git symbolic ref HEAD
检查您是否在分支上并获取其名称:

> git checkout master
[....]
> git symbolic-ref HEAD
refs/heads/master
> echo $?
0
如果您签出了标记,则会出现错误:

> git checkout some_tag
[....]
> git symbolic-ref HEAD
fatal: ref HEAD is not a symbolic ref
> echo $?
128
(编辑)比我之前拥有的更好:

if read what where huh; test "$what" = ref:
then echo On branch ${where#refs/heads/}
else echo "not on any branch; last checkout was:"
     git reflog|sed '/checkout:/!d;q'
fi < "`git rev-parse --git-dir`"/HEAD

将告诉您当前提交的所有符号名。

当我在标记上时,
git branch
将显示我在
*(无分支)
所以我想我不总是在分支上?另外,
git-tag
对于知道我在哪个标签上(即我签出了哪个标签)也没有多大帮助。(我回复了另一个答案)我在一个分支上,
git-descripe--tags
不会抛出任何错误。它只显示了第一个可访问的标记,您可以从其中are@iberbeu是的,我注意到,
git descripe--tags
不适合这样做,请参见我自己的答案^?在这种情况下,git告诉您不在分支上,而您实际上在分支上
if read what where huh; test "$what" = ref:
then echo On branch ${where#refs/heads/}
else echo "not on any branch; last checkout was:"
     git reflog|sed '/checkout:/!d;q'
fi < "`git rev-parse --git-dir`"/HEAD
git log HEAD^! --oneline --decorate