Git Plumbing 用于告知当前检出的分支是哪个

4

在编写 git 脚本时,我需要找到当前检出的分支名称。目前看来,唯一“可靠”的方法是使用 git branch | sed -n '/^\* /s///p'。(使用引号是因为像 .gitconfig 文件中的 color.branchcolumn.branch 这样的东西;它根本不可靠。)我发现的另一件事是 git name-rev,但它似乎返回指向 HEAD 的第一个(按名称排序的)分支:

> git checkout master
> git checkout -b another
> git checkout master
> git name-rev HEAD
HEAD another

有没有比 sed -n '\#^ref: refs/heads/#s###p' .git/HEAD 更好的方法来确定当前检出的分支?


似乎类似于https://dev59.com/5HI-5IYBdhLWcg3w9thw。 - Travis Pessetto
2个回答

9
只需使用以下命令输出所在的分支:
```bash git branch ```
git rev-parse --symbolic-full-name --abbrev-ref HEAD

如果您有多个分支,也不应该出现问题,如果您不在任何分支上,则只会显示HEAD


这个问题的答案,无论是这个还是twalberg的回答都是正确的,我已经给他们点了赞。如果可以接受多个答案,我会在这种情况下这样做。git symbolic-ref胜出,因为我更喜欢分离HEAD的非零退出代码。未声明的要求,我知道。 - just somebody

6

这是我在几个脚本中使用的一小段git命令,它可以返回refs/heads/branchname,或者如果你没有在分支上,它会返回你脱离HEAD时的SHA值:

cur_branch=$(git symbolic-ref HEAD 2>> /dev/null || git rev-parse HEAD)

如果需要的话,删除refs/heads/前缀应该很简单...


5
--short 处理前缀,-q 抑制标准错误输出。 - just somebody
1
懒人专用:git symbolic-ref -q --short HEAD - kgadek

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接