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

它指向一个 符号引用。**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 命令可以为给定的修订版找到符号名称。因此,要获取当前分支名称,我们可以读取修订版 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 branchsed 命令的例子:

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

实际上,自 2.22 版本起,Git 已引入 --show-current 选项到 git branch 命令,这样我们可以直接获取当前分支名称:

$ git branch --show-current
feature

显然,这个命令比解析 git branch 命令的输出更方便。

7. 总结

在这篇简短的文章中,我们探讨了几种在 Git 存储库中获取当前分支名称的方法。