This question already has answers here:
How to get the current branch name in Git?

(38个答案)


2年前关闭。




在Unix或GNU脚本环境(例如Linux发行版,Cygwin,OSX)中,确定当前在工作目录中 check out 哪个Git分支的最佳方法是什么?

该技术的一种用途是自动标记发行版(例如svnversion将与Subversion一起使用)。

另请参阅我的相关问题:How to programmatically determine whether a Git checkout is a tag, and if so what is the tag name?

最佳答案

正确的解决方案是偷看contrib/completions/git-completion.bash__git_ps1中针对bash提示执行的操作。删除所有额外内容,例如选择如何描述分离的HEAD情况,即当我们在未命名分支上时,它是:

branch_name="$(git symbolic-ref HEAD 2>/dev/null)" ||
branch_name="(unnamed branch)"     # detached HEAD

branch_name=${branch_name##refs/heads/}

git symbolic-ref用于从符号引用中提取完全限定的分支名称;我们将其用于HEAD(当前已 checkout 分支)。

替代解决方案可能是:
branch_name=$(git symbolic-ref -q HEAD)
branch_name=${branch_name##refs/heads/}
branch_name=${branch_name:-HEAD}

在最后一行中,我们处理分离的HEAD情况,仅使用“HEAD”表示这种情况。

添加了11-06-2013

Junio C. Hamano(git维护者)博客文章Checking the current branch programatically,自2013年6月10日起更详细地解释了,为什么(以及操作方法)。

08-27 23:27
查看更多