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

3971

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


15
让你的集成开发环境(IDE)显示文件.git/HEAD,可能位于父目录中。 - Tino
124
显示Git中当前分支的命令是:$ git rev-parse --abbrev-ref HEAD - Fantastory
3
可能是重复的问题:如何以编程方式确定当前检出的Git分支 - tripleee
2
启用NetBeans中的“视图->显示版本标签”,然后您所需要做的就是将鼠标悬停在项目(或文件,或收藏夹)文件夹上,即可查看当前分支。 - idclaar
9
可能是在Git中仅显示当前分支的重复问题。 - techraf
显示剩余6条评论
51个回答

39

要获取git中的当前分支,请使用以下命令:

git branch --show-current

1
你必须最终编辑此注释并删除有问题的破折号,因为人们会复制粘贴答案。 - Sych
2
你好 @sych,抱歉 - 这个命令中的破折号有什么问题吗?在我的机器上(Linux,mint版本,git版本2.25.1),复制粘贴后可以正常工作。 - Daniel Winterstein
1
@Rose,你编辑过后就可以了 :) - Sych

29

git branch 只显示当前分支名称。

虽然 git branch 命令会展示所有分支,并使用星号突出显示当前所在的分支,但当需要处理许多分支时,这样做可能过于繁琐。

要仅显示当前所在的分支,可以使用以下命令:

git rev-parse --abbrev-ref HEAD

这对于CI和其他构建工具非常有用! - phouse512
最佳答案是在脚本中使用它。 - Ben Keil
1
@DylanNicholson git branch --contains 有时会列出多个分支。 - Joe Chacko

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

只显示分支名称


如果你的分支显示类似于“(HEAD detached at SUM_BRANCH_01)”,那么尝试执行以下命令:“git branch | grep -e "^" | cut -d' ' -f 5 | cut -d ')' -f 1”。 - Benjamin Castor
我刚刚创建了完全相同的脚本来获取当前分支名称。我觉得这可能有助于差异比较。 - tggagne

22

很抱歉这又是一篇命令行答案,但这正是我在寻找此问题时所需要的,其中许多答案都非常有帮助。我的解决方案是以下的bash shell函数:

get_branch () {
    git rev-parse --abbrev-ref HEAD | grep -v HEAD || \
    git describe --exact-match HEAD 2> /dev/null || \
    git rev-parse HEAD
}

我希望这个能够始终给我一些既易读又可以直接用作git checkout参数的东西。

  • 在本地分支上: feature/HS-0001
  • 在标记的提交(detached)上:v3.29.5
  • 在远程分支上(detached,未打标记):SHA1
  • 在任何其他detached提交上:SHA1

1
谢谢您发布这篇文章,其他答案似乎都不关心始终生成可用于“git checkout”参数的内容。 - zwol

22

使用好老的awk,找到一个与Oliver Refalo的命令行解决方案相同长度的解决方案:

git branch | awk '/^\*/{print $2}'

awk读作“在与正则表达式匹配的行上执行{}中的操作”。默认情况下,它假设分隔符为空格,因此打印第二个字段。如果您可以假设只有带有星号的行是您的分支,则可以删除^。啊,Bash高尔夫!


21

为git状态提供一个更少嘈杂的版本就可以解决问题了。

git status -bsuno

它打印输出

## branch-name

2

开发...origin/develop

- Kalpesh Soni
不可能,它需要几分钟来刷新索引,然后一段时间挂起,最后会输出几个屏幕的文件路径。考虑到甚至没有解释它是如何工作的,以及为什么它可能比其他建议更好,我给它打了一个负一分。 - RAM237

20

有多种方法可以检查当前 Git 分支,但我更喜欢:

git branch --show

即使是git branch命令也会显示当前分支名称以及所有现有分支名称列表。


20
为什么不使用git-aware shell prompt,它可以告诉你当前分支的名称?git status也有所帮助。
如何在contrib/中的git-prompt.sh(git版本2.3.0)中实现此功能,定义在__git_ps1辅助函数中:
  1. 首先,如果检测到正在进行的rebase,则存在一种特殊情况。Git在rebase过程中使用未命名的分支(detached HEAD),并将原始分支保存在其他位置。

  2. 如果.git/HEAD文件是符号链接(这是非常罕见的情况,来自Git的古老历史),则使用git symbolic-ref HEAD 2>/dev/null

  3. 否则,读取.git/HEAD文件。接下来的步骤取决于其内容:

    • 如果此文件不存在,则没有当前分支。这通常发生在存储库是裸仓库的情况下。

    • 如果以'ref: '前缀开头,则.git/HEAD是symref(符号参考),并且我们处于正常分支上。删除此前缀以获取完整名称,并删除refs/heads/以获取当前分支的简短名称:

      b="${head#ref: }"
      # ...
      b=${b##refs/heads/}
      
    • 如果它不以'ref: '开头,那么它是分离的HEAD(匿名分支),直接指向某个提交。使用git describe ...以人类可读的形式写出当前提交。

希望这可以帮助到你。


4
如果你正在开发一个能识别git的shell提示符,那么你应该使用这里的哪个答案?"Turtles all the way down." - tripleee
1
@tripleee:从 https://github.com/git/git/blob/master/contrib/completion/git-prompt.sh 借鉴一些想法。 - Jakub Narębski
4
据记录,似乎是执行了 git describe --contains --all HEAD 命令,这在页面上其他地方我目前没有看到。正如您所知,仅提供链接的答案在 StackOverflow 上并不被推荐。 - tripleee
2
@tripleee:我已经添加了一个解释,说明git-prompt.sh(又名__git_ps1)是如何做到的... - Jakub Narębski

20

我会尝试以下方法之一:

1.> git symbolic-ref --short HEAD

git symbolic-ref --short HEAD
>>> sid-dev

2.> git branch --show-current

git branch --show-current
>>> sid-dev

3.> git name-rev –name-only HEAD

git name-rev –name-only HEAD
>>> HEAD sid-dev

注意:

1.> git symbolic-ref --short HEAD 显示当前分支HEAD的短符号引用。这就是当前的分支名。

2.> git branch --show-current 也是打印当前分支名称的简单有效方法。

3.> git name-rev –name-only HEAD 给出当前分支HEAD修订版本的符号名称。

4.> 在上面的例子中,sid-dev 是我的分支名称。


18

你可以在当前工作目录中使用 Git Bash 命令如下:

git status -b

它将告诉您当前所在的分支, 有许多有用的命令,其中一些是

-s

--short 以简洁格式输出。

-b --branch 即使在简短格式下也显示分支和跟踪信息。

--porcelain[=] 以易于解析的格式输出,适用于脚本。 类似于短格式输出,但不管用户配置和 Git 版本如何都保持稳定。详见下文说明。

version 参数用于指定格式版本。这是可选的,默认为原始格式 v1。

--long 以长格式输出,这是默认设置。

-v --verbose 除了显示已更改的文件名称外,还显示已准备好提交的文本更改(即类似于 git diff --cached 的输出)。如果指定了-v两次,则还显示尚未准备好提交的工作树中的更改(即类似于 git diff 的输出)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接