问:

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

答1:

huntsbot.com洞察每一个产品背后的需求与收益,从而捕获灵感

要仅显示您所在的当前分支的名称:

git rev-parse --abbrev-ref HEAD

参考:Show just the current branch in Git

好一个,遗憾的是,如果您处于“分离的 HEAD”状态(它只是输出“HEAD”,这完全没用),它就不起作用。

我猜如果您处于“分离 HEAD”状态,则 git 内部不会跟踪它所属的分支,因为 git branch 显示 * (no branch),这也是无用的......

“git symbolic-ref --short HEAD”也适用于同样的目的

git rev-parse --abbrev-ref HEAD 2>/dev/null 如果您刚刚创建了一个尚未 HEAD 的新存储库,则 /dev/null 部分可防止您看到错误。

git symbolic-ref --short HEAD 似乎更通用。如果 repo 是刚刚初始化的,则 git rev-parse --abbrev-ref HEAD 产生 HEAD。

答2:

huntsbot.com汇聚了国内外优秀的初创产品创意,可按收入、分类等筛选,希望这些产品与实践经验能给您带来灵感。

git branch

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

要仅检索您所在分支的名称:

git rev-parse --abbrev-ref HEAD

或使用 Git 2.22 及更高版本:

git branch --show-current

但这对 Notepad++ 和 Netbeans 没有帮助。只是 git bash (和可能的 Vim),我提到了这一点。我正在尝试使用其他没有命令行的 Ide 和文本编辑器。

@mike628 实际上他们正在帮助你,除非你想通过 GUI 访问一些东西。正确的?

如果你愿意在 Eclipse 中工作,有一个名为“eGit”的程序,它有一个 GUI,可以告诉你其中所有 repos 的当前分支。否则,我不知道..您将受制于您想要使用的与您选择的程序兼容的任何插件的创建者(如果有的话)。

在执行 git checkout --orphan foo 之后,git branch 未能显示分支 foo。而建议的 git symbolic-ref HEAD 另一个答案有效。

git rev-parse --abbrev-ref HEAD 究竟做了什么?我以前使用 git describe --contains --all HEAD 但有时会中断,我不太清楚为什么。

答3:

huntsbot.com聚合了超过10+全球外包任务平台的外包需求,寻找外包任务与机会变的简单与高效。

您还有 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 2014 年 3 月 26 日

与所有其他答案一样,当您处于“分离 HEAD”状态时,这不起作用

@CarlosCampderrós:如果您处于分离的 HEAD 状态,则没有当前分支之类的东西。毕竟,您所在的提交可能可以通过零个、一个或多个分支到达。

当没有 HEAD 时,这会在空的 git 存储库中产生问题

使用 git 版本 2.4.4 git rev-parse --abbrev-ref HEAD 会在您处于分离状态时显示 HEAD。

最好的答案仍然是 git symbolic-ref HEAD | sed -e "s/^refs\/heads\///" ,因为它在处于分离状态时会显示类似 HEAD detached at a63917f 的字符串,这与其他答案不同,即不显示任何内容或显示 HEAD。这个很重要。

答4:

huntsbot.com高效搞钱,一站式跟进超10+任务平台外包需求

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

本地分支(主)

远程跟踪分支,与本地分支同步(origin/master 与 master 提交相同)

远程跟踪分支,与本地分支不同步(origin/feature-foo)

标签 (v1.2.3)

子模块(在子模块目录中运行)

一般分离头(以上都不是)

结果:

git 分支 | sed -n ‘/* /s///p’ 本地分支:master 远程跟踪分支(同步):(与 origin/master 分离)远程跟踪分支(不同步):(与 origin/feature-foo 分离) 标签:(从 v1.2.3 分离)子模块:(HEAD 在 285f294 分离)一般分离头:(从 285f294 分离)

本地分支:master

远程跟踪分支(同步):(与源/主分离)

远程跟踪分支(不同步):(与 origin/feature-foo 分离)

标签:(从 v1.2.3 分离)

子模块:(HEAD 在 285f294 分离)

一般分离头:(从285f294分离)

混帐状态 | head -1 本地分支:# 在分支上 master 远程跟踪分支(同步):# HEAD 在 origin/master 远程跟踪分支分离(不同步):# HEAD 在 origin/feature-foo 标签分离:# HEAD 在 v1 分离.2.3 submodule: # HEAD detached at 285f294 general detached head: # HEAD detached at 285f294

local branch: # 在主分支上

远程跟踪分支(同步):# HEAD 在 origin/master 分离

远程跟踪分支(不同步):# HEAD 在 origin/feature-foo 分离

tag: # HEAD 在 v1.2.3 分离

子模块:# HEAD 在 285f294 分离

general detached head: # HEAD detached at 285f294

git describe --all 本地分支:heads/master 远程跟踪分支(同步):heads/master(注意:不是 remotes/origin/master) 远程跟踪分支(不同步):remote/origin/feature-foo 标签: v1.2.3 子模块:remote/origin/HEAD 通用分离头:v1.0.6-5-g2393761

本地分支:heads/master

远程跟踪分支(同步):heads/master(注意:不是 remotes/origin/master)

远程跟踪分支(不同步):remote/origin/feature-foo

标签: v1.2.3

子模块:遥控器/原点/头

通用分离头:v1.0.6-5-g2393761

cat .git/HEAD:本地分支:ref:refs/heads/master 子模块:cat:.git/HEAD:不是目录所有其他用例:相应提交的 SHA

本地分支: ref: refs/heads/master

子模块:cat:.git/HEAD:不是目录

所有其他用例:相应提交的 SHA

git rev-parse --abbrev-ref HEAD 本地分支:掌握所有其他用例:HEAD

本地分支:master

所有其他用例:HEAD

git symbolic-ref --short HEAD 本地分支:掌握所有其他用例:致命:ref HEAD 不是符号引用

本地分支:master

所有其他用例:致命:ref HEAD 不是符号 ref

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

总之,似乎没有人能像我那样手工完成。

这对我很有帮助:git describe --all --exact-match 2>/dev/null | sed 's=.*/==' 对我来说是最好的解决方案(标签和分支头的好名字,随机分离头没有输出。

但是,我刚刚发现,当有多个分支引用同一个提交时,使用 git describe 会严重失败,例如在 git checkout -b foo 之后 - 它任意使用其中一个(似乎可能是最近创建的一个)。我将更改策略以使用来自 git branch 的过滤输出,并且仅在结果与头部分离时使用 git describe。

实际上,我需要使用 git branch --no-color 来确保文件名没有烦人的终端转义码。

“当前分支”(由 checkout foo 设置)和“当前提交”是 2 个不同的概念。 symbolic-ref 只查看活动分支。 describe 只查看一个提交,并从所有指向它(或靠近它)的分支/标签中启发式地选择。像 branch 和 status 这样的 DWIM 命令在定义时使用当前分支,但 all 在所有“分离的 HEAD”情况下都会进行启发式选择。

答5:

huntsbot.com聚合了超过10+全球外包任务平台的外包需求,寻找外包任务与机会变的简单与高效。

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

git branch --show-current

根据手册页:

打印当前分支的名称。在分离 HEAD 状态下,不打印任何内容。

是的,我去年三月在该页面的评论中提到了这一点:stackoverflow.com/questions/6245570/…。在 stackoverflow.com/a/55088865/6309 中。

至少提到这在分离的 HEAD 状态下不起作用。只是浪费了几个小时让 git 2.22 编译...

从 Git 版本 2.22 开始可用:github.com/git/git/blob/master/Documentation/RelNotes/…

它不显示分支名称。它所显示的只是主要的

这很奇怪。你确定你正在运行至少 2.22 吗?

答6:

huntsbot.com提供全网独家一站式外包任务、远程工作、创意产品分享与订阅服务!

另一种选择:

git name-rev --name-only HEAD

它也可以用 echo ${$(git symbolic-ref --quiet HEAD)#refs/heads/} 检索

如果主分支和特性分支的 HEAD 相同(例如在合并期间),则它不起作用。即使在功能分支上执行,它也会返回“master”。

git checkout master && git name-rev --name-only HEAD # ac-187 它没有按预期工作

我在合并之前将它保存到一个变量中,并且如果我签出特定的提交,我的 HEAD 可能会被解除连接。在这些情况下,这工作正常。

我正在通过 Jenkins 管道执行此操作。所以这似乎是目前对我来说最好的答案。执行 git branch --list 只会说 * (HEAD detached at 7127db5)。做 git rev-parse --abbrev-ref HEAD 只是说 HEAD 等等。

答7:

huntsbot.com汇聚了国内外优秀的初创产品创意,可按收入、分类等筛选,希望这些产品与实践经验能给您带来灵感。

很简单,我把它放在一个衬里(bash)中

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

(信用:有限赎罪)

当我在那里时,获得远程跟踪分支的一个班轮(如果有的话)

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

huntsbot.com聚合了超过10+全球外包任务平台的外包需求,寻找外包任务与机会变的简单与高效。

斜线太多了! :) sed -n 's/\* //p' 可以解决问题。虽然我倾向于偏执,所以我会用 sed -n 's/^\* //p' 锚定它。

答8:

打造属于自己的副业,开启自由职业之旅,从huntsbot.com开始!

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

$ git status

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

...
On branch master
...

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

根据您想要执行的操作,您可以使用 git status 并使用 git status | head -1 仅获取第一行输出,这会产生类似于 # On branch master 的内容。我确信版本差异也需要考虑在内。

@JoshPinter:您也可以使用git status | grep 'On branch',它应该具有相同的效果(应该,并不意味着如果您的 Git 版本以不同的方式显示它)。或 git branch | grep '*',它将显示分支的名称,并在其开头带有星号。

是的,这也有效,并且可能更灵活。我在开发 Rails 应用程序中仅显示分支名称的最终结果是:git status | head -1.gsub('# On branch ', '')

如果要管理大量文件,git status 可能需要很长时间才能返回值。

是的,例如,如果您想在网页上打印分支,git status 可能会占用整个页面的生成时间。

答9:

huntsbot.com – 程序员副业首选,一站式外包任务、远程工作、创意产品分享订阅平台。

git symbolic-ref -q --short HEAD

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

谢谢,很好用! - 我还在我的脚本中添加了“-C path_to_folder”。

这是一个很好的解决方案,因为使用 -q 选项,它会在“分离的 HEAD”状态下返回错误代码,但不会将任何内容打印到 stderr。

这是在没有任何提交的情况下在新的回购中为我工作的唯一解决方案

答10:

huntsbot.com聚合了超过10+全球外包任务平台的外包需求,寻找外包任务与机会变的简单与高效。

在终端中写入以下命令:

git branch | grep \*

或者

git branch --show-current

或者

  git branch --show

答11:

一个优秀的自由职业者,应该有对需求敏感和精准需求捕获的能力,而huntsbot.com提供了这个机会

要在 git 使用中获取当前分支,

git branch --show-current

huntsbot.com聚合了超过10+全球外包任务平台的外包需求,寻找外包任务与机会变的简单与高效。

您必须最终编辑此评论并删除有问题的破折号,人们复制粘贴答案

你好@sych抱歉——这个命令中的破折号有什么问题?这可以很好地复制粘贴在我的机器上(Linux,薄荷味,git 版本 2.25.1)

@Rose 编辑后就可以了 :)

原文链接:https://www.huntsbot.com/qa/XWP9/how-do-i-get-the-current-branch-name-in-git?lang=zh_CN&from=csdn

打造属于自己的副业,开启自由职业之旅,从huntsbot.com开始!

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐