如何获取Git中当前分支的名称?


当前回答

为什么不使用git-aware shell提示符,它会告诉您当前分支的名称?git状态也有帮助。


如何从contrib/执行git-prompt.sh(git版本2.3.0),如__git_ps1 helper函数中所定义:

首先,如果检测到正在进行的重基,则存在特殊情况。Git在rebase过程中使用未命名的分支(分离的HEAD)使其成为原子分支,原始分支保存在其他地方。如果.git/HEAD文件是一个符号链接(从git的古代历史来看,这种情况非常罕见),那么它将使用git符号ref HEAD 2>/dev/null否则,它将读取.git/HEAD文件。下一步取决于其内容:如果此文件不存在,则当前没有分支。如果存储库是空的,通常会发生这种情况。如果它以“ref:”前缀开头,那么.git/HEAD是symref(符号引用),并且我们处于正常分支。去掉前缀以获得全名,去掉refs/heads/以获得当前分支的短名称:b=“${head#ref:}”# ...b=${b#refs/heads/}如果它不是以“ref:”开头,那么它是分离的HEAD(匿名分支),直接指向某个提交。使用git描述。。。以人类可读的形式编写当前提交。

我希望这有帮助。

其他回答

gitbranch仅显示当前分支名称。

虽然gitbranch将显示所有分支并用星号突出显示当前分支,但在处理大量分支时,它可能太麻烦。

要仅显示当前所在的分支,请使用:

git rev-parse --abbrev-ref HEAD

下面的shell命令告诉您当前所在的分支。

git branch | grep ^\*

如果您不想在每次想知道分支并使用Bash时键入长命令,请为该命令提供一个短别名,例如别名cb,如下所示。

alias cb='git branch | grep ^\*'

当您在branch master中并且提示为$时,您将获得*master,如下所示。

$ cb
* master

在分离头上返回分支名称或SHA1:

git rev-parse --abbrev-ref HEAD | grep -v ^HEAD$ || git rev-parse HEAD

这是@dmaestro12答案的简短版本,没有标记支持。

使用Mac将其添加到PS1:

PS1='\W@\u >`[ -d .git ] && git branch | grep  ^*|cut -d" " -f2`> $ '

在运行上述命令之前:

运行该命令后:

不要担心,如果它不是GIT存储库,它不会显示错误,因为[-d.GIT]会检查.GIT文件夹是否存在。

您可以使用一条grep指令来完成此操作,使用Perl模式和\K来重置匹配缓冲区,因此您只能获得分支名称。

$ git branch | grep -oP "^\*\s+\K\S+$"
master