1. Overview
Git has become a popular and widely used version control system in the industry. Usually, when we work with a Git repository, we work with branches.
In this tutorial, we’ll explore how to get the branch name we’re currently working on.
2. Introduction to the Problem
First of all, let’s prepare a Git repository called myRepo:
$ git branch -a
* feature
master
remotes/origin/HEAD -> origin/master
remotes/origin/master
As the git branch command’s output shows, we have two local branches in myRepo, and now, the currently checked-out branch is the feature branch, as there is a “*” character in front of “feature“.
Sometimes, we may want to only get the current branch name without the whole branch list. For example, if we have many local branches in the repository, we may get a long branch list. Or, when we write some scripts to automate some processes, we want only to get the branch name and pass it to other commands.
So next, let’s see how to get the current branch “feature” quickly.
3. Using the git symbolic-ref Command
The current branch information is stored or linked by the .git/HEAD file, depending on the Git version. For example, on this machine, the .git/HEAD file holds:
$ cat .git/HEAD
ref: refs/heads/feature
So, it points to a symbolic ref. The git symbolic-ref command allows us to read and modify symbolic refs. We can use this command to get the short current branch name:
$ git symbolic-ref --short HEAD
feature
4. Using the git rev-parse Command
Since Git version 1.7, we can alternatively use the git rev-parse command to get the current branch name:
$ git rev-parse --abbrev-ref HEAD
feature
5. Using the git name-rev Command
Git’s git name-rev command can find the symbolic names for given revs. Therefore, to get the current branch name, we can read the name of the rev HEAD:
$ git name-rev --name-only HEAD
feature
As the output above shows, the git name-rev command prints the current branch name as well. We should note that we added the –name-only option to the command to suppress the rev information (HEAD) from the output.
6. Using the git branch Command
We know if we launch the git branch command without any options, Git will print all local branches and put the current branch on the first line, with a “*” character in front of the name:
$ git branch
* feature
master
Therefore, we can parse the git branch command’s output to get the branch name. Let’s see an example of combining git branch and the sed command:
$ git branch | sed -n '1{s/^* *//;p}'
feature
Actually, since version 2.22, Git has introduced the –show-current option to the git branch command so that we can get the current branch name straightforwardly:
$ git branch --show-current
feature
Obviously, this command is better than parsing the git branch command’s output.
7. Conclusion
In this quick article, we’ve addressed several ways to get the current branch name in a Git repository.