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


当前回答

我建议使用这两个命令中的任何一个。

git分支|grep-e“^*”|cut-d“”-f 2

OR

gitstatus | sed-n 1p | cut-d“”-f 3

OR(更详细)

gitstatus-uno-bs|cut-d“#”-f 3 | cut-d-f 1'|sed-e's/^[\t]//1'|sed-n 1p

其他回答

为什么不使用git-aware shell提示符,它会告诉您当前分支的名称?git状态也有帮助。


如何从contrib/执行git-prompt.sh(git版本2.3.0),如__git_ps1 helper函数中所定义:

首先,如果检测到正在进行的重基,则存在特殊情况。Git在rebase过程中使用未命名的分支(分离的HEAD)使其成为原子分支,原始分支保存在其他地方。如果.git/HEAD文件是一个符号链接(从git的古代历史来看,这种情况非常罕见),那么它将使用git符号ref HEAD 2>/dev/null否则,它将读取.git/HEAD文件。下一步取决于其内容:如果此文件不存在,则当前没有分支。如果存储库是空的,通常会发生这种情况。如果它以“ref:”前缀开头,那么.git/HEAD是symref(符号引用),并且我们处于正常分支。去掉前缀以获得全名,去掉refs/heads/以获得当前分支的短名称:b=“${head#ref:}”# ...b=${b#refs/heads/}如果它不是以“ref:”开头,那么它是分离的HEAD(匿名分支),直接指向某个提交。使用git描述。。。以人类可读的形式编写当前提交。

我希望这有帮助。

使用早期的想法;假设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
#!/bin/bash
function git.branch {
  br=`git branch | grep "*"`
  echo ${br/* /}
}
git.branch

只需在~/.bash_profile中添加以下行:

branch_show() {
     git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/'
}
export PS1="\u@\h \[\033[32m\]\w\[\033[33m\]\$(branch_show)\[\033[00m\] $ "

这样,您可以在Terminal中拥有当前分支名称

由Coderwall.com提供

git symbolic-ref -q --short HEAD

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