git plumbing告诉签出的分支

jus*_*ody 4 git

脚本git,我需要找出签出的分支名称.到目前为止,似乎唯一"可靠"的方法就是这样做git branch | sed -n '/^\* /s///p'.(由于类似color.branchcolumn.branch在.gitconfig中的内容而引用引号;它根本不可靠.)我发现的唯一另一件事是git name-rev,但这似乎返回指向HEAD的第一个(按名称排序)分支:

> git checkout master
> git checkout -b another
> git checkout master
> git name-rev HEAD
HEAD another
Run Code Online (Sandbox Code Playgroud)

有没有什么比sed -n '\#^ref: refs/heads/#s###p' .git/HEAD找出检出的分支更好?

bpo*_*iss 9

只需输出您所在的分支:

git rev-parse --symbolic-full-name --abbrev-ref HEAD
Run Code Online (Sandbox Code Playgroud)

如果你有多个分支,也应该没有问题,如果你不在任何分支上它只是给你 HEAD


twa*_*erg 6

这是git我在几个脚本中使用的一个小调用,要么返回refs/heads/branchname,要么如果你不在分支上,它会给你分离的HEAD的SHA:

cur_branch=$(git symbolic-ref HEAD 2>> /dev/null || git rev-parse HEAD)
Run Code Online (Sandbox Code Playgroud)

删除refs/heads/前缀应该非常简单,如果你需要它...

  • `--short`负责前缀,`-q`抑制stderr的输出. (5认同)