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

时间:2013-05-30 12:44:40

标签: git

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

现在,我有:

git describe --tags

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

fatal: No names found, cannot describe anything.

我可以依赖这种行为,还是有更好/更正式的方法呢?

是否有一些案例没有被我知道的方法所捕获?

4 个答案:

答案 0 :(得分:7)

您可以使用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

答案 1 :(得分:1)

(编辑)比我之前更好:

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

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

经过一些测试后,事实证明git describe --tags不是很可靠(在一个案例中,我检查了一个分支它确实返回了一些东西)。

我最终使用了:

git branch | grep '^*'

这将返回选定的分支。如果我签出了一个标签,这将返回:

* (no branch)

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