Git 获取当前分支名称或适当字符串(若不在分支上)的最快方法

Git 获取当前分支名称或适当字符串(若不在分支上)的最快方法,git,Git,目前我使用 git branch | grep \* | cut -d ' ' -f2- 但就执行时间而言,它太慢了 是否有更快的方法生成相同的输出 我指的是相同的输出(我没有看到任何我不喜欢的情况),例如分离的头部 (HEAD detached at SHA) 重新定基 (no branch, rebasing BRANCH) 等等 我已经试过了 cat .git/HEAD | cut -d '/' -f3 但我知道,有时候,例如,如果重新定基调,那是行不通的。然后我必须检查是否存在

目前我使用

git branch | grep \* | cut -d ' ' -f2-
但就执行时间而言,它太慢了

是否有更快的方法生成相同的输出

我指的是相同的输出(我没有看到任何我不喜欢的情况),例如分离的头部

(HEAD detached at SHA)
重新定基

(no branch, rebasing BRANCH)
等等


我已经试过了

cat .git/HEAD | cut -d '/' -f3

但我知道,有时候,例如,如果重新定基调,那是行不通的。然后我必须检查是否存在
.git/REBASE\u HEAD
?此外,还存在从任何子目录定位
.git
目录的问题。最后,我不知道这样的解决方案是否会更快,至少如果我(由于缺乏经验)是编写它的人,可能不会更快。

我很惊讶它这么慢,但你可以试试这个。可能同样慢。
git status | head-n1 | cut-d'''-f4

您也可以使用:(但不幸的是,对于其他答案,这并不处理过程中的重基情况)

revparse
symbolic ref
都是管道命令,执行时间可能非常接近。

您也可以使用。但是,要小心,因为当重定基址时,不起作用

git symbolic-ref --short HEAD

顺便说一下,这是我知道的获取此信息的较短命令(29个字符)

除非您必须绝对使用git命令,否则您可以从实际的
.git
文件夹中读取分支名称

cat .git/HEAD | cut -d '/' -f3

当您不在任何分支(其他分支也不在)中时,这会中断,在此期间,它将返回您所处的提交的SHA(与其他分支不同)。我想不出还有什么其他情况会出现问题。

可能是@AntonBalaniuc的重复我不认为这是重复的,因为他要求以最快的方式获得当前分支机构的名称,而另一个问题是如何在一个独立的国家中获得这个名称作为旁注,当前命令不会输出分支名称。我猜这超出了你的问题范围?@Romanvaleri我的git不是很流利。我不知道什么是超然的头脑状态。我现在就去查它。@theonlygusti简单地说,你可以直接签出一个提交,然后在你再次签出一个分支之前,没有当前的分支。如果您的脚本必须包含所有可能的情况,我认为这一点值得一提。并非所有情况都适用,我希望始终具有与我的
git分支
示例相同的输出。我认为这可能是一种方法,但在重定基址时不起作用。可能是因为必须检查此错误,因此最终将slower@theonlygusti当你处于互动或失败的基础上时,你就没有任何分支。code>git分支也会显示这一点。启动时您所在的分支机构(如果有)将记录在有关正在进行的重新基准的信息中
git状态
可以检索它。(编辑:我知道我应该先通读问题本身下所有折叠的注释:-)你可以获得与
git分支| grep…|相同的效果剪切…
使用:
git symbolic ref-q--short HEAD | | echo“(头在$(git rev parse--short HEAD)处分离”)”
|
表示如果左侧命令失败,请运行右侧命令。
-q
使symbolic ref命令安静地失败(没有
致命的
消息),右边的命令打印出
git branch
对于分离的头部将具有的内容,使用
git rev parse--short
获得缩写哈希。@torek我认为问题本身也澄清了这一点,但是是的,我想标题还是错了,我会修改的it@theonlygusti那是。。。至少很烦人。我想你是在Windows上,在Windows上启动进程是出了名的慢。这种事情在Linux上几乎是即时发生的。简而言之,与管道命令不同,管道命令是供人使用的,管道命令主要用于脚本编写。请参见重定此输出的基址时
头部
。我想我可以测试该输出,然后将其转换为
(无分支,重定基址???
,但这可能会变得更慢。
cat .git/HEAD | cut -d '/' -f3