如何以编程方式确定当前签出的Git分支

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

这种技术的一种用法是自动标记发布版本(如svnversion将使用Subversion)。

另请参阅我的相关问题:如何以编程方式确定Git签出是否为标记,如果是,则标记名称是什么?


正确的解决方案是在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,该HEAD目前已被检出分支。

备用解决方案可以是:

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 maintainer)博客文章,2013年6月10日以编程方式检查当前分支,更详细地解释了whys (和hows)。


有没有人看到Git描述你所在的分支有什么问题?

git rev-parse --symbolic-full-name --abbrev-ref HEAD

这可以在$()中使用,并且可以在Bash,Powershell,Perl等中轻松传递。如果您在提交时有多个分支,并且如果您当前不在分支上,它就会简单回复“HEAD”。

或者,您可以使用

git symbolic-ref --short -q HEAD

这会给你相同的输出,但是如果你被分离,它将不会返回任何东西。 如果您想要在分离时发生错误,只需删除-q即可。


你可以使用git name-rev --name-only HEAD

链接地址: http://www.djcxy.com/p/3287.html

上一篇: How to programmatically determine the current checked out Git branch

下一篇: Show just the current branch in Git