sosfiw
sosfiw
发布于 1周前

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