如何在Git中获取当前分支的名称?
git branch
显示 *(无分支)
,这也是无用的... - Carlos Campderrósgit rev-parse --abbrev-ref HEAD 2>/dev/null
这条命令用来获取当前所在的分支名称,在新建的、还没有 HEAD 的仓库中运行不会报错,因为 2>/dev/null
部分可以防止错误信息输出。 - Paradiesstaubgit symbolic-ref --short HEAD
看起来更加通用。如果仓库刚初始化,git rev-parse --abbrev-ref HEAD
会返回 HEAD
。 - Alex Fortunagit branch
只获取您所在分支的名称:
git rev-parse --abbrev-ref HEAD
--show-current
选项,用于“打印当前分支的名称”。这个组合也适用于在第一次提交之前刚初始化的存储库。git branch --show-current
git checkout --orphan foo
命令后,使用 git branch
没有显示分支 foo
。然而,像其他回答建议的那样,使用 git symbolic-ref HEAD
命令可以起到作用。 - Marcus Junius Brutusgit rev-parse --abbrev-ref HEAD
究竟是做什么的?我之前使用的是 git describe --contains --all HEAD
,但有时会出错,而我不太确定原因。 - Schneemsgit branch --show-current
对我来说很有效。 - Olotin Temitope你还可以使用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\///"
– Darien 26. Mar 2014
git rev-parse --abbrev-ref HEAD
显示HEAD
。 - peterhilgit symbolic-ref HEAD | sed -e "s/^refs\/heads\///"
,因为它会在分离状态下显示类似于 HEAD detached at a63917f
的字符串,而其他答案则显示空白或 HEAD。这很重要。 - Bernard为了方便自己(但对他人也可能有用),我总结了本主题中提到的大多数(基本命令行)技巧,每种技巧应用于多个用例:HEAD
指向以下内容之一:
master
)origin/master
指向与 master
相同提交的分支)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:不是目录
git rev-parse --abbrev-ref HEAD
master
HEAD
git symbolic-ref --short HEAD
master
fatal: ref HEAD is not a symbolic ref
(FYI,这是使用 git 版本 1.8.3.1 完成的)
git describe --all --exact-match 2>/dev/null | sed 's=.*/=='
对我来说是最好的解决方案(适用于标签和分支主题的良好命名,并且对于随机分离头无输出)。 - Alex Dupuygit checkout -b foo
之后,使用git describe
存在严重问题-它会任意选择其中一个(似乎是最近创建的一个)。我将改变我的策略,使用git branch
的过滤输出,并仅在结果为“detached head”时使用git describe
。 - Alex Dupuycheckout foo
设置)和“当前提交”是两个不同的概念。 symbolic-ref
仅查看活动分支。 describe
仅查看“提交”,并从指向它(或附近)的所有分支/标签中启发式选择。 DWIM命令(如branch
和status
)在定义了当前分支时使用当前分支,但在所有“分离的HEAD”情况下,所有命令都会进行启发式选择。 - Beni Cherniavsky-Paskingit branch --show-current
的结果添加到这个列表中吗?当本地分支被检出时,它会打印分支的短名称(例如:"master"),否则它将不打印任何内容并返回成功。 - Michael R从git 2.22版本开始,您只需要使用以下命令:
git branch --show-current
根据 man page:
打印当前分支的名称。在分离 HEAD 状态下,不会打印任何内容。
main
的分支上时,它将显示主要内容。 - Max另一个选择:
git name-rev --name-only HEAD
echo ${$(git symbolic-ref --quiet HEAD)#refs/heads/}
检索。 - Antoinegit branch --list
只会显示 * (HEAD detached at 7127db5)
。执行 git rev-parse --abbrev-ref HEAD
只会显示 HEAD
等等。 - Mig82git checkout master && git name-rev --name-only HEAD
,但是 # ac-187
是一个标签名。您能否详细说明一下您使用上述命令的用途?提前感谢您的回答 :) - Chandra Shekhar Paatni很简单,我用一行代码(bash)搞定了。
git branch | sed -n '/\* /s///p'
(来源:Limited Atonement)
在那里,获取远程跟踪分支(如果有的话)的一行命令:
git rev-parse --symbolic-full-name --abbrev-ref @{u}
sed -n 's/\* //p'
就可以达到效果。尽管我有点偏执,所以我会用锚定符号改写成 sed -n 's/^\* //p'
。 - Mark Reed请在终端中输入以下命令:
git branch | grep \*
或者git branch --show-current
或者在 Git 2.22 及以上版本中:
git branch --show
在Linux中,您可以在存储库目录的命令行(控制台)中键入:
$ git status
你会看到一些文本,其中有类似以下内容的内容:
...
On branch master
...
这意味着您当前正在master
分支上。如果您此时正在编辑位于同一本地存储库(包含受Git版本控制管理的文件的本地目录)中的任何文件,则您正在编辑此分支中的文件。
git status
命令获取输出的第一行,这可以通过在命令后添加 | head -1
来实现,输出结果类似于 # On branch master
。请注意,可能还需要考虑版本差异。 - Joshua Pintergit status | grep 'On branch'
,这应该有相同的效果(应该,不意味着如果你的 Git 版本显示不同就会有)。或者使用 git branch | grep '*'
,它将显示带有星号开头的分支名称。 - Tadeck<tick>git status | head -1<tick>.gsub('# On branch ', '')
- Joshua Pintergit status
命令可能需要很长时间才能返回结果。 - the Tin Mangit status
可能会拖慢整个页面的生成时间。 - Artem Russakovskiigit symbolic-ref -q --short HEAD
我在需要当前分支名称的脚本中使用它。它将显示对HEAD的当前短符号引用,这将是您的当前分支名称。
.git/HEAD
,可能位于父目录中。 - Tino