首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何以编程方式确定当前签出的Git分支

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

Stack Overflow用户
提问于 2009-10-20 15:52:59
回答 20查看 134K关注 0票数 305

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

这项技术的一个用途是自动标记一个版本(就像svnversion对Subversion所做的那样)。

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

EN

回答 20

Stack Overflow用户

回答已采纳

发布于 2009-10-20 09:34:32

正确的解决方案是在__git_ps1中查看contrib/completions/git-completion.bash的bash提示符。删除所有额外部分,比如选择如何描述分离的头部情况,即当我们在未命名的分支上时,它是:

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,即当前已签出的分支。

替代解决方案可以是:

branch_name=$(git symbolic-ref -q HEAD)
branch_name=${branch_name##refs/heads/}
branch_name=${branch_name:-HEAD}

在最后一行中,我们处理分离的头部情况,使用简单的“头部”来表示这种情况。

增加了11-06-2013

Junio C. Hamano (git维护者)的博客文章,,来自2013年6月10日,更详细地解释了为什么要使用(以及如何使用)。

票数 331
EN

Stack Overflow用户

发布于 2012-08-15 02:27:23

有没有人觉得让Git描述一下你所在的分支有什么不好?

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

它可以在$()中使用,并在Bash、Powershell、Perl等中轻松传递。如果您在提交时有多个分支,并且如果您当前不在一个分支上,则它不会被愚弄,它只会返回"HEAD“。

或者,您可以使用

git symbolic-ref --short -q HEAD

这将给你相同的输出,但如果你是分离的,它根本不会返回任何东西。如果你想在分离时出现错误,这是很有用的,只需删除-q即可。

票数 229
EN

Stack Overflow用户

发布于 2013-02-27 20:08:14

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

票数 51
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1593051

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档