为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

开心每一天1111 2019-07-31 15:53:20
如何以编程方式确定当前签出的Git分支在Unix或GNU脚本环境(例如Linux发行版,Cygwin,OSX)中,确定当前在工作目录中检出哪个Git分支的最佳方法是什么?这种技术的一个用途是自动标记一个版本(就像svnversionSubversion一样)。另请参阅我的相关问题:如何以编程方式确定Git签出是否为标记,如果是,那么标记名称是什么?
查看完整描述

3 回答

?
慕森王

TA贡献1777条经验 获得超3个赞

正确的解决方案是看看contrib / completions / git-completion.bash是否为bash提示做了__git_ps1。删除所有额外内容,例如选择如何描述分离的HEAD情况,即当我们在未命名的分支上时,它是:

branch_name="$(git symbolic-ref HEAD 2>/dev/null)" ||branch_name="(unnamed branch)"     # detached HEADbranch_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}

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


Junio C. Hamano(git maintainer)博客文章,从2013年6月10日起以编程方式检查当前分支,更详细地解释了为什么(和hows)。


查看完整回答
反对 回复 2019-07-31
?
慕侠2389804

TA贡献1719条经验 获得超6个赞

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

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

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

或者,您可以使用

git symbolic-ref --short -q HEAD

哪个会给你相同的输出,但如果你被分离,它将不会返回任何内容。如果你想在分离时发生错误,这个很有用,只需删除-q即可。


查看完整回答
反对 回复 2019-07-31
?
富国沪深

TA贡献1790条经验 获得超9个赞

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


查看完整回答
反对 回复 2019-07-31
  • 3 回答
  • 0 关注
  • 754 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信