仅显示Git中的当前分支


356

我尝试为此寻找特殊的Git命令,但找不到。有没有比以下短或快的东西?

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

1
我认为这是获得当前分支机构的最佳途径
-Eimantas


@ChandrayyaGK:不,因为另一个问题是关于在IDE中执行此操作。(许多答案都是命令行使用的,因此值得一看,但这不是一个正确的副本,如果有答案可以为已经存在的内容增添价值,那么应该将这些答案迁移到此处。)
2014年

3
@Torek-这是Git很难完成的另一个简单任务。
jww

发布的链接@ChandrayyaGK的最高答案比这要慢得多!
Colm Bhandal '18 -10-1

Answers:


659
$ git rev-parse --abbrev-ref HEAD
master

这应该适用于Git 1.6.3或更高版本。


git-1.6.2.5也不适合我。git rev-parse --abbrev-ref HEAD => --abbrev-ref 311172491a9a667f9321bdf1c4fe5e22cc6e2c08(即rev-parse不接受--abbrev-ref(也不在手册页中))
JasonWoof

1
JasonWoof在1.6.4.2中为我工作,需要更改日志以查看它的确切时间;-)
Michael Krelin-黑客2009年

7
据我从Git日志中得知,此功能于2009-04-20合并,并随版本1.6.3一起发布。
伯爵

1
我也很想明白这一点。这实际上如何工作?同样,--abbrev-ref看起来也不为任何其他参数返回任何内容。它不能仅将HEAD作为参数。
Setafire

6
请注意,如果您处于分离的符号引用中(可能意味着您位于分支中,但签出了先前的提交),则此命令将仅返回HEAD(不是预期的)master
unifreak

129

在Git 1.8.1中,可以将git symbolic-ref命令与“ --short”选项一起使用:

$ git symbolic-ref HEAD
refs/heads/develop
$ git symbolic-ref --short HEAD
develop

谢谢。别名已创建。
Michael Burr

7
优于IMO接受的答案,因为它适用于回购,没有提交
杰罗姆Dalbert

2
fatal: ref HEAD is not a symbolic ref作为TravisCI构建的一部分运行此错误时发生错误
kmanzana

似乎在GIT 1.9.1```git版本1.9.1中不起作用致命:ref HEAD不是符号ref`“
理查德(Richard)

对我有用:git version 2.16.2.windows.1
Tagc

59

使用Git 2.22(Q2 2019),你将有一个更简单的方法:git branch --show-current

参见Daniels Umanovskis(提交的commit 0ecb1fc(25 Oct 2018 (由Junio C Hamano合并--commit 3710f60中,2019年3月7日)umanovskis
gitster

branch:介绍--show-current显示选项

用调用时--show-currentgit branch将打印当前分支名称并终止。
仅打印实际名称,不打印refs/heads
在分离的HEAD状态下,不输出任何内容。

旨在用于脚本和交互式/信息性用途。
与不同git branch --list,不需要过滤就可以获取分支名称。


15
最后,添加了从一开始就应该存在的地方!
dtasev

27

您可能对以下产品的输出感兴趣

git symbolic-ref HEAD

特别是,根据您的需求和布局,您可能希望这样做

basename $(git symbolic-ref HEAD)

要么

git symbolic-ref HEAD | cut -d/ -f3-

然后又有一个.git/HEAD文件,您可能也对此感兴趣。


2
您可以缩短git rev-parse --symbolic-full-namegit symbolic-ref
伯爵

1
您不需要使用basenamecut; 使用BR=${BR#refs/heads/}(其中BR是您保存的输出变量的名称git symbolic-ref HEAD)。
JakubNarębski09年

雅库布(Jakub)当然没有,只要您的输出变量。
Michael Krelin-黑客

5
可以做git symbolic-ref --short HEAD
法赫德西迪基

2
如果分支名称中有斜杠(“ task / foo”,“ feature / bar”),则该名称将中断。当同事们认为斜线很酷时,我的一堆构建脚本开始失败了
vacri

13

据我所知,无法自然地仅显示Git中的当前分支,因此我一直在使用:

git branch | grep '*'

3
虽然可以与GNU coreutils一起使用,但grep '*'名义上是语法错误。git branch | sed -n 's/^\* //p'无论如何,您可能都想要。或者实际上,OP首先发布了什么,这就是同一件事。
2014年

@tripleee您能启发我为什么grep '*'名义上是语法错误吗?
JK ABC

1
@JKABC:@tripleee的意思是这'*'是一个正则表达式,因此无效。您可能要使用'[*]'(即用字符*代替运算符“零次或多次”)。
约翰多多

2
@johndodo感谢您的澄清,现在对我来说很有意义。我通常通过grep '\*'
JK ABC

2
只能使用git branch | grep "*" | cut -d' ' -f2
Fahad Siddiqui

6

我想这应该很快,并且可以与Python API一起使用:

git branch --contains HEAD
* master

4
这不会输出当前分支。它输出恰好指向提交HEAD指向的分支列表。是的,它可能会重叠,但这可能会导致误解。从您所在的位置创建一个新分支,然后重试您的行:两个分支。问题要求“ 仅当前分支 ”。
RomainValeri

4

我在用着

/etc/bash_completion.d/git

它随Git一起提供,并提供带有分支名称和参数完成的提示。


如何激活此提示?
Alex

在ubuntu中,$ source /etc//bash_completion.d/git-prompt 文件在不同系统上的命名可能不同。(注意:source关键字与.bash中的(点)相同。)
迈克尔

1

这并不短,但它也处理分离的分支:

git branch | awk -v FS=' ' '/\*/{print $NF}' | sed 's|[()]||g'

1

为了完整echo $(__git_ps1)起见,至少在Linux上,应为您提供括号括起来的当前分支的名称。

在某些情况下这可能很有用,因为它不是Git命令(取决于Git),尤其是用于设置Bash命令提示符以显示当前分支

例如:

/mnt/c/git/ConsoleApp1 (test-branch)> echo $(__git_ps1)
(test-branch)
/mnt/c/git/ConsoleApp1 (test-branch)> git checkout master
Switched to branch 'master'
/mnt/c/git/ConsoleApp1 (master)> echo $(__git_ps1)
(master)
/mnt/c/git/ConsoleApp1 (master)> cd ..
/mnt/c/git> echo $(__git_ps1)

/mnt/c/git>

该项目是别名,对于交互式Shell脚本应存在。它可能不存在任何类型的脚本。
亚历山大·斯托尔

0

有人可能会觉得这个()有用。当前分支显示有*标记。git show-branch --current

host-78-65-229-191:idp-mobileid user-1$ git show-branch --current
! [CICD-1283-pipeline-in-shared-libraries] feat(CICD-1283): Use latest version of custom release plugin.
 * [master] Merge pull request #12 in CORES/idp-mobileid from feature/fix-schema-name to master
--
+  [CICD-1283-pipeline-in-shared-libraries] feat(CICD-1283): Use latest version of custom release plugin.
+  [CICD-1283-pipeline-in-shared-libraries^] feat(CICD-1283): Used the renamed AWS pipeline.
+  [CICD-1283-pipeline-in-shared-libraries~2] feat(CICD-1283): Point to feature branches of shared libraries.
-- [master] Merge pull request #12 in CORES/idp-mobileid from feature/fix-schema-name to master
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.