确定是否使用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