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分支的最佳方法是什么?
该技术的一种用途是自动标记发行版(例如
另请参阅我的相关问题:How to programmatically determine whether a Git checkout is a tag, and if so what is the tag name?
git symbolic-ref用于从符号引用中提取完全限定的分支名称;我们将其用于HEAD(当前已 checkout 分支)。
替代解决方案可能是:
在最后一行中,我们处理分离的HEAD情况,仅使用“HEAD”表示这种情况。
添加了11-06-2013
Junio C. Hamano(git维护者)博客文章Checking the current branch programatically,自2013年6月10日起更详细地解释了,为什么(以及操作方法)。
(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日起更详细地解释了,为什么(以及操作方法)。