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

我来自 Subversion 的背景,当我有一个分支时,我知道我正在使用 “这些工作文件指向此分支” 的内容。

但是使用 Git 时,我不确定在 NetBeans 或 Notepad ++ 中编辑文件时,是将文件绑定到主文件还是其他分支。

bash 中的git没问题,它告诉我我在做什么。

答案

要显示当前所在的分支,而未列出其他分支,可以执行以下操作:

git rev-parse --abbrev-ref HEAD

参考:

git branch

应该显示您的仓库的所有本地分支。已加星号的分支是您当前的分支。

如果只想检索所在分支的名称,则可以执行以下操作:

git rev-parse --abbrev-ref HEAD

您还可以使用git symbolic-ref HEAD来显示完整的 refspec。

在 Git v1.8 及更高版本中仅显示分支名称(感谢 Greg 指出):

$ git symbolic-ref --short HEAD

在 Git v1.7 + 上,您还可以执行以下操作:

$ git rev-parse --abbrev-ref HEAD

如果您在分支上,则两者都应使用相同的分支名称。如果您是一个超脱的人,答案会有所不同。

注意:

在较早的客户端上,这似乎可行:

$ git symbolic-ref HEAD | sed -e "s/^refs\/heads\///"

达里安 2014 年 3 月 26 日

供我自己参考(但可能对其他人有用),我对该线程中提到的大多数(基本命令行)技术进行了概述,每种技术都适用于几种用例:HEAD(指向):

  • 当地分公司(主管)
  • 远程跟踪分支,与本地分支同步(源 / 主机与主机相同的提交)
  • 远程跟踪分支,与本地分支不同步(origin / feature-foo)
  • 标签(v1.2.3)
  • 子模块(在子模块目录中运行)
  • 一般独立头(以上均无)

结果:

  • git branch | sed -n '/\* /s///p'
    • 本地分支: master
    • 远程跟踪分支(同步):( (detached from origin/master)
    • 远程跟踪分支(不同步):( (detached from origin/feature-foo)
    • 标签:( (detached from v1.2.3)
    • 子模块: (HEAD detached at 285f294)
    • 一般分离头:( (detached from 285f294)
  • git status | head -1
    • 本地分支机构: # On branch master
    • 远程跟踪分支(同步): # HEAD detached at origin/master
    • 远程跟踪分支(不同步): # HEAD detached at origin/feature-foo
    • 标签: # HEAD detached at v1.2.3
    • 子模块: # HEAD detached at 285f294
    • 一般独立头: # HEAD detached at 285f294
  • git describe --all
    • 本地分支机构: heads/master
    • 远程跟踪分支(同步): heads/master (注意: 不是 remotes/origin/master
    • 远程跟踪分支(不同步): remotes/origin/feature-foo
    • 标签: v1.2.3
    • 子模块: remotes/origin/HEAD
    • 通用分离头: v1.0.6-5-g2393761
  • cat .git/HEAD
    • 本地分支: ref: refs/heads/master
    • 子模块: cat: .git/HEAD: Not a directory
    • 所有其他用例:对应提交的 SHA
  • git rev-parse --abbrev-ref HEAD
    • 本地分支: master
    • 所有其他用例: HEAD
  • git symbolic-ref --short HEAD
    • 本地分支: master
    • 所有其他用例: fatal: ref HEAD is not a symbolic ref

(仅供参考,这是使用 git 版本 1.8.3.1 完成的)

另一种选择:

git name-rev --name-only HEAD

从 git 的 2.22 版开始,您可以使用:

git branch --show-current

好简单,我把它放在一根衬里(bash)

git branch | sed -n '/\* /s///p'

(信用:有限赎罪)

当我在那里的时候,一个班轮去了远程跟踪分支机构(如果有的话)

git rev-parse --symbolic-full-name --abbrev-ref @{u}

您只需在 Linux 的存储库目录中输入命令行(控制台)即可:

$ git status

您会看到一些文本,其中类似于:

...
On branch master
...

这意味着您当前在master分支上。如果此时正在编辑任何文件,并且该文件位于同一本地存储库(包含 Git 版本控制管理下的文件的本地目录)中,则您正在此分支中编辑文件。

git symbolic-ref -q --short HEAD

我在需要当前分支名称的脚本中使用它。它将向您显示当前对 HEAD 的简短符号引用,这将是您当前的分支名称。

git branch | grep -e "^*" | cut -d' ' -f 2

将仅显示分支名称