Contents

在 Git 存储库中获取当前分支名称

1. 概述

Git 已成为业界流行且广泛使用的版本控制系统。通常,当我们使用 Git 存储库时,我们会使用分支。

在本教程中,我们将探讨如何获取我们当前正在处理的分支名称。

2. 问题介绍

首先,让我们准备一个名为myRepo的 Git 存储库:

$ git branch -a
* feature
  master
  remotes/origin/HEAD -> origin/master
  remotes/origin/master

正如 git  branch 命令的输出所示,我们在myRepo中有两个本地分支,现在,当前签出的分支是feature分支,因为“ feature ”前面有一个“*”字符。

有时,我们可能只想获取当前分支名称而不获取整个分支列表。例如,如果我们在存储库中有很多本地分支,我们可能会得到一个很长的分支列表。或者,当我们编写一些脚本来自动化某些流程时,我们只想获取分支名称并将其传递给其他命令。

那么接下来,让我们看看如何快速获取当前分支的“ feature ”。

3. 使用 git symbolic-ref 命令

当前分支信息由*.git/HEAD文件存储或链接,具体取决于 Git 版本。例如,在这台机器上,.git/HEAD*文件包含:

$ cat .git/HEAD
ref: refs/heads/feature

因此,它指向一个符号 ref。 git symbolic-ref 命令允许我们读取和修改符号引用。我们可以使用这个命令来获取短的当前分支名称:

$ git symbolic-ref --short HEAD
feature

4. 使用git rev-parse命令

从 Git 1.7 版本开始,我们也可以使用git rev-parse 命令来获取当前分支名称

$ git rev-parse --abbrev-ref HEAD
feature

5. 使用 git name-rev命令

Git 的 git name-rev 命令可以找到给定转速的符号名称。因此,要获取当前分支名称,我们可以读取 rev HEAD的名称:

$ git name-rev --name-only HEAD
feature

如上面的输出所示,git name-rev命令也会打印当前分支名称。我们应该注意到,我们在命令中添加了 –name-only选项以抑制输出中的转速信息(HEAD)*。*

6. 使用git branch命令

我们知道如果我们不带任何选项启动 git branch命令,Git 将打印所有本地分支并将当前分支放在第一行,名称前带有“*”字符:

$ git branch
* feature
  master

因此,我们可以解析 git branch命令的输出来获取分支名称。让我们看一个结合git branch和 sed 命令的例子:

$ git branch | sed -n '1{s/^* *//;p}'
feature

实际上,从 2.22 版本开始,Git 在git branch命令中引入了–show-current选项,** 以便我们可以直接获取当前分支名称:

$ git branch --show-current
feature

显然,这个命令比解析git branch命令的输出要好。