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


当前回答

还有一种选择:

git name-rev --name-only HEAD

其他回答

很简单,我用一行(bash)就搞定了

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

(信贷:有限补偿)

当我在那里的时候,唯一的一条线路就是远程跟踪分支(如果有的话)

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

此命令将在顶部显示当前分支名称的提交列表。

您还有显示完整refspec的git符号ref HEAD。

要在Git v1.8及更高版本中仅显示分支名称(感谢Greg指出这一点):

git symbolic-ref --short HEAD

在Git v1.7+上,您还可以执行以下操作:

git rev-parse --abbrev-ref HEAD

如果您在一个分支上,这两个分支都应该给出相同的分支名称。如果你头脑冷静,答案就不同了。

注:在早期的客户端上,这似乎有效:git符号ref HEAD|sed-e“s/^refs\/heads\///”–Darien 26。2014年3月

使用早期的想法;假设sha1为40个字符;和跟踪引用(是的,应该删除调试打印行:-):

git reflog | awk '
$3 == "checkout:" && (sha == "" || sha == $1 ) {
  from=$(NF - 2)
  to=$NF
  print from, to, length(from) > "/dev/stderr"
  if (length(from) != 40) { print from ; exit; }
  sha=substr(from, 1, 7)
  print sha > "/dev/stderr"
}
'

给出原始输出:

$ git status
HEAD detached at 147049c
[...]
$ ./gime-branch.sh
a47be8d2167641088b66bf8f5c2bf7d3da0c642c HEAD^ 40
a47be8d
master HEAD^ 6
master

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

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

awk将其理解为“在与正则表达式匹配的行上执行{}中的内容”。默认情况下,它采用空格分隔的字段,因此您可以打印第二个。如果假设只有分支所在的行具有*,则可以删除^。啊,打高尔夫!