How to get the current branch name in Git?
How to get the current branch name in Git?
Question
I'm from a Subversion background and, when I had a branch, I knew what I was working on with "These working files point to this branch".
But with Git I'm not sure when I am editing a file in NetBeans or Notepad++, whether it's tied to the master or another branch.
There's no problem with git
in bash, it tells me what I'm doing.
Accepted Answer
git branch
should show all the local branches of your repo. The starred branch is your current branch.
If you want to retrieve only the name of the branch you are on, you can do:
git rev-parse --abbrev-ref HEAD
or with Git 2.22 and above:
git branch --show-current
Popular Answer
To display the current branch you're on, without the other branches listed, you can do the following:
git rev-parse --abbrev-ref HEAD
Reference:
Read more... Read less...
You have also git symbolic-ref HEAD
which displays the full refspec.
To show only the branch name in Git v1.8 and later (thank's to Greg for pointing that out):
git symbolic-ref --short HEAD
On Git v1.7+ you can also do:
git rev-parse --abbrev-ref HEAD
Both should give the same branch name if you're on a branch. If you're on a detached head answers differ.
Note:
On an earlier client, this seems to work:
git symbolic-ref HEAD | sed -e "s/^refs\/heads\///"
– Darien 26. Mar 2014
For my own reference (but it might be useful to others) I made an overview of most (basic command line) techniques mentioned in this thread, each applied to several use cases: HEAD is (pointing at):
- local branch (master)
- remote tracking branch, in sync with local branch (origin/master at same commit as master)
- remote tracking branch, not in sync with a local branch (origin/feature-foo)
- tag (v1.2.3)
- submodule (run inside the submodule directory)
- general detached head (none of the above)
Results:
git branch | sed -n '/\* /s///p'
- local branch:
master
- remote tracking branch (in sync):
(detached from origin/master)
- remote tracking branch (not in sync):
(detached from origin/feature-foo)
- tag:
(detached from v1.2.3)
- submodule:
(HEAD detached at 285f294)
- general detached head:
(detached from 285f294)
- local branch:
git status | head -1
- local branch:
# On branch master
- remote tracking branch (in sync):
# HEAD detached at origin/master
- remote tracking branch (not in sync):
# HEAD detached at origin/feature-foo
- tag:
# HEAD detached at v1.2.3
- submodule:
# HEAD detached at 285f294
- general detached head:
# HEAD detached at 285f294
- local branch:
git describe --all
- local branch:
heads/master
- remote tracking branch (in sync):
heads/master
(note: notremotes/origin/master
) - remote tracking branch (not in sync):
remotes/origin/feature-foo
- tag:
v1.2.3
- submodule:
remotes/origin/HEAD
- general detached head:
v1.0.6-5-g2393761
- local branch:
cat .git/HEAD
:- local branch:
ref: refs/heads/master
- submodule:
cat: .git/HEAD: Not a directory
- all other use cases: SHA of the corresponding commit
- local branch:
git rev-parse --abbrev-ref HEAD
- local branch:
master
- all the other use cases:
HEAD
- local branch:
git symbolic-ref --short HEAD
- local branch:
master
- all the other use cases:
fatal: ref HEAD is not a symbolic ref
- local branch:
(FYI this was done with git version 1.8.3.1)
As of version 2.22 of git you could just use:
git branch --show-current
As per man page:
Print the name of the current branch. In detached HEAD state, nothing is printed.
Well simple enough, I got it in a one liner (bash)
git branch | sed -n '/\* /s///p'
(credit: Limited Atonement)
And while I am there, the one liner to get the remote tracking branch (if any)
git rev-parse --symbolic-full-name --abbrev-ref @{u}