Shell脚本正确获取Git当前所在分支的方法
看到一些博文提到获取shell脚本获取git当前分支使用了git branch,类似的方法如下:
#!/bin/bash
function git.branch {
br=`git branch | grep "*"`
echo ${br/* /}
}
实际上,这是一种错误的方法。原因如下:
$ git branch
* master
next
$ git checkout master^0
$ git branch
* (no branch)
master
next
一般情况下,当我们使用git branch时,在控制台会在当前分支前加上星号(*),以提示我们当前所在的分支。但当我们checkout 一个不存在的分支时,如上面例子所示,git会在(no branch)前加上了星号,这显然不是正确的。
正确方式时使用 git symbolic-ref,脚本如下:
if branch=$(git symbolic-ref --short -q HEAD)
then
echo on branch $branch
else
echo not on any branch
fi