How do I get the name of the current branch in Git?
.git/HEAD
, possibly in a parent directory - anyone To display only the name of the current branch you're on:
git rev-parse --abbrev-ref HEAD
Reference: Show just the current branch in Git
Answered 2023-09-20 20:14:00
git branch
shows * (no branch)
, which is also useless... - anyone git rev-parse --abbrev-ref HEAD 2>/dev/null
The /dev/null part prevents you from seeing an error if you just created a new repository that has not yet HEAD. - anyone git symbolic-ref --short HEAD
seems to be more versatile. git rev-parse --abbrev-ref HEAD
yields HEAD
if the repo is a just-initialized one. - anyone git branch
should show all the local branches of your repo. The starred branch is your current branch.
To retrieve only the name of the branch you are on:
git rev-parse --abbrev-ref HEAD
Version 2.22 adds the --show-current
option to ”print the name of the current branch”. The combination also works for freshly initialized repositories before the first commit:
git branch --show-current
Answered 2023-09-20 20:14:00
git checkout --orphan foo
then git branch
failed to show branch foo
. Whereas git symbolic-ref HEAD
as suggested another answer worked. - anyone git rev-parse --abbrev-ref HEAD
do exactly? I was previously using git describe --contains --all HEAD
but that breaks sometimes and i'm not quite sure why. - anyone 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
Answered 2023-09-20 20:14:00
git rev-parse --abbrev-ref HEAD
shows HEAD
when you’re on detached head. - anyone git symbolic-ref HEAD | sed -e "s/^refs\/heads\///"
since it will display a string like HEAD detached at a63917f
when in a detached state, unlike the other answers which show either nothing or HEAD. This is important. - anyone 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):
Results:
git branch | sed -n '/\* /s///p'
master
(detached from origin/master)
(detached from origin/feature-foo)
(detached from v1.2.3)
(HEAD detached at 285f294)
(detached from 285f294)
git status | head -1
# On branch master
# HEAD detached at origin/master
# HEAD detached at origin/feature-foo
# HEAD detached at v1.2.3
# HEAD detached at 285f294
# HEAD detached at 285f294
git describe --all
heads/master
heads/master
(note: not remotes/origin/master
)remotes/origin/feature-foo
v1.2.3
remotes/origin/HEAD
v1.0.6-5-g2393761
cat .git/HEAD
:
ref: refs/heads/master
cat: .git/HEAD: Not a directory
git rev-parse --abbrev-ref HEAD
master
HEAD
git symbolic-ref --short HEAD
master
fatal: ref HEAD is not a symbolic ref
(FYI this was done with git version 1.8.3.1)
Answered 2023-09-20 20:14:00
git describe --all --exact-match 2>/dev/null | sed 's=.*/=='
was the best solution for me (good names for tags and branch heads, no output for random detached heads. - anyone git describe
has a serious failing when there are multiple branches referencing the same commit, e.g. right after git checkout -b foo
- it uses one of them arbitrarily (seems like maybe the most recently created one). I will change my strategy to use filtered output from git branch
and only use git describe
if the result is something about a detached head. - anyone checkout foo
) and "current commit" are 2 distinct concepts. symbolic-ref
only looks at active branch. describe
only looks at a commit, and chooses heuristically from all branches/tags pointing to it (or near it). DWIM commands like branch
and status
use current branch when defined, but all of them choose heuristically in all "detached HEAD" situations. - anyone git branch --show-current
to this list? The behavior is that when a local branch is checked out, it prints the branch short name (ex: "master"), and otherwise, it prints nothing, returns success. - anyone 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.
Answered 2023-09-20 20:14:00
One more alternative:
git name-rev --name-only HEAD
Answered 2023-09-20 20:14:00
echo ${$(git symbolic-ref --quiet HEAD)#refs/heads/}
- anyone git checkout master && git name-rev --name-only HEAD # ac-187
It does not work as expected - anyone git branch --list
just says * (HEAD detached at 7127db5)
. Doing git rev-parse --abbrev-ref HEAD
just says HEAD
and so on. - anyone 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}
Answered 2023-09-20 20:14:00
sed -n 's/\* //p'
does the trick. Although I tend toward the paranoid so I would anchor it with sed -n 's/^\* //p'
. - anyone write the following command in terminal :
git branch | grep \*
or
git branch --show-current
or on Git 2.22 and above:
git branch --show
Answered 2023-09-20 20:14:00
You can just type in command line (console) on Linux, in the repository directory:
$ git status
and you will see some text, among which something similar to:
...
On branch master
...
which means you are currently on master
branch. If you are editing any file at that moment and it is located in the same local repository (local directory containing the files that are under Git version control management), you are editing file in this branch.
Answered 2023-09-20 20:14:00
git status
and get only the first line of output with git status | head -1
which yields something like # On branch master
. I'm sure version differences will needed to be accounted for as well. - anyone git status | grep 'On branch'
, which should have the same effect (should, does not mean it will if your version of Git displays it differently). Or git branch | grep '*'
, which will show the name of the branch with a star at the beginning of it. - anyone <tick>git status | head -1<tick>.gsub('# On branch ', '')
- anyone git status
can take a long time to return a value if there are a lot of files being managed. - anyone git status
may tank the whole page's generation time. - anyone git symbolic-ref -q --short HEAD
I use this in scripts that need the current branch name. It will show you the current short symbolic reference to HEAD, which will be your current branch name.
Answered 2023-09-20 20:14:00
To get the current branch in git use,
git branch --show-current
Answered 2023-09-20 20:14:00
git branch | grep -e "^*" | cut -d' ' -f 2
will show only the branch name
Answered 2023-09-20 20:14:00
git branch
show current branch name only.
While git branch will show you all branches and highlight the current one with an asterisk, it can be too cumbersome when working with lots of branches.
To show only the branch you are currently on, use:
git rev-parse --abbrev-ref HEAD
Answered 2023-09-20 20:14:00
git branch --contains
sometimes lists more than one branch. - anyone Found a command line solution of the same length as Oliver Refalo's, using good ol' awk:
git branch | awk '/^\*/{print $2}'
awk
reads that as "do the stuff in {}
on lines matching the regex". By default it assumes whitespace-delimited fields, so you print the second. If you can assume that only the line with your branch has the *, you can drop the ^. Ah, bash golf!
Answered 2023-09-20 20:14:00
Sorry this is another command-line answer, but that's what I was looking for when I found this question and many of these answers were helpful. My solution is the following bash shell function:
get_branch () {
git rev-parse --abbrev-ref HEAD | grep -v HEAD || \
git describe --exact-match HEAD 2> /dev/null || \
git rev-parse HEAD
}
This should always give me something both human-readable and directly usable as an argument to git checkout
.
feature/HS-0001
v3.29.5
Answered 2023-09-20 20:14:00
git checkout
. - anyone A less noisy version for git status would do the trick
git status -bsuno
It prints out
## branch-name
Answered 2023-09-20 20:14:00
Why not use git-aware shell prompt, which would tell you name of current branch? git status
also helps.
How git-prompt.sh from contrib/
does it (git version 2.3.0), as defined in __git_ps1
helper function:
First, there is special case if rebase in progress is detected. Git uses unnamed branch (detached HEAD) during the rebase process to make it atomic, and original branch is saved elsewhere.
If the .git/HEAD
file is a symbolic link (a very rare case, from the ancient history of Git), it uses git symbolic-ref HEAD 2>/dev/null
Else, it reads .git/HEAD
file. Next steps depends on its contents:
If this file doesn't exist, then there is no current branch. This usually happens if the repository is bare.
If it starts with 'ref: '
prefix, then .git/HEAD
is symref (symbolic reference), and we are on normal branch. Strip this prefix to get full name, and strip refs/heads/
to get short name of the current branch:
b="${head#ref: }"
# ...
b=${b##refs/heads/}
If it doesn't start with 'ref: '
, then it is detached HEAD (anonymous branch), pointing directly to some commit. Use git describe ...
to write the current commit in human-readable form.
I hope that helps.
Answered 2023-09-20 20:14:00
git describe --contains --all HEAD
which I don't currently see elsewhere on this page. As I'm sure you know, link-only answers are not recommended on StackOverflow. - anyone git-prompt.sh
(aka __git_ps1
) does it... - anyone There is various way to check the current branch of Git
but I prefer :
git branch --show
Even git branch
also shows the current branch name along with all existing branch name list.
Answered 2023-09-20 20:14:00
#!/bin/bash
function git.branch {
br=`git branch | grep "*"`
echo ${br/* /}
}
git.branch
Answered 2023-09-20 20:14:00
you can use git bash on the working directory command is as follow
git status -b
it will tell you on which branch you are on there are many commands which are useful some of them are
-s
--short Give the output in the short-format.
-b --branch Show the branch and tracking info even in short-format.
--porcelain[=] Give the output in an easy-to-parse format for scripts. This is similar to the short output, but will remain stable across Git versions and regardless of user configuration. See below for details.
The version parameter is used to specify the format version. This is optional and defaults to the original version v1 format.
--long Give the output in the long-format. This is the default.
-v --verbose In addition to the names of files that have been changed, also show the textual changes that are staged to be committed (i.e., like the output of git diff --cached). If -v is specified twice, then also show the changes in the working tree that have not yet been staged (i.e., like the output of git diff).
Answered 2023-09-20 20:14:00
git status
will also give the branch name along with changes.
e.g.
>git status
On branch master // <-- branch name here
.....
Answered 2023-09-20 20:14:00
I would try one of the following:
1.> git symbolic-ref --short HEAD
git symbolic-ref --short HEAD
>>> sid-dev
git branch --show-current
>>> sid-dev
3.> git name-rev –name-only HEAD
git name-rev –name-only HEAD
>>> HEAD sid-dev
Notes:
1.> git symbolic-ref --short HEAD displays the short symbolic reference to the current branch’s HEAD. This is the current branch name.
2.> git branch --show-current is also a simple and efficient way to print the current branch name.
3.> git name-rev –name-only HEAD gives the symbolic name for
HEAD
revision of the current branch
4.> In the above examples,
sid-dev
is the name of my branch.
Answered 2023-09-20 20:14:00
Over time, we might have a really long list of branches.
While some of the other solutions are great, Here is what I do (simplified from Jacob's answer):
git branch | grep \*
Now,
git status
works, but only If there are any local changes
Answered 2023-09-20 20:14:00
I recommend using any of these two commands.
git branch | grep -e "^*" | cut -d' ' -f 2
OR
git status | sed -n 1p | cut -d' ' -f 3
OR (more verbose)
git status -uno -bs| cut -d'#' -f 3 | cut -d . -f 1| sed -e 's/^[ \t]//1'| sed -n 1p
Answered 2023-09-20 20:14:00
In Netbeans, ensure that versioning annotations are enabled (View -> Show Versioning Labels). You can then see the branch name next to project name.
Answered 2023-09-20 20:14:00
What about this?
{ git symbolic-ref HEAD 2> /dev/null || git rev-parse --short HEAD 2> /dev/null } | sed "s#refs/heads/##"
Answered 2023-09-20 20:14:00
symbolic-ref
part also need --short
to avoid prefixing the branchname with refs/heads/
? - anyone The following shell command tells you the branch that you are currently in.
git branch | grep ^\*
When you don't want to type that long command every time you want to know the branch and you are using Bash, give the command a short alias, for example alias cb
, like so.
alias cb='git branch | grep ^\*'
When you are in branch master and your prompt is $
, you will get * master
as follows.
$ cb
* master
Answered 2023-09-20 20:14:00
git branch | grep '^\*'
- anyone You can permanently set up your bash output to show your git-branch name. It is very handy when you work with different branches, no need to type $ git status
all the time.
Github repo git-aware-prompt
.
Open your terminal (ctrl-alt-t) and enter the commands
mkdir ~/.bash
cd ~/.bash
git clone git://github.com/jimeh/git-aware-prompt.git
Edit your .bashrc with sudo nano ~/.bashrc
command (for Ubuntu) and add the following to the top:
export GITAWAREPROMPT=~/.bash/git-aware-prompt
source "${GITAWAREPROMPT}/main.sh"
Then paste the code
export PS1="\${debian_chroot:+(\$debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\] \[$txtcyn\]\$git_branch\[$txtred\]\$git_dirty\[$txtrst\]\$ "
at the end of the same file you pasted the installation code into earlier. This will give you the colorized output:
Answered 2023-09-20 20:14:00
I have a simple script called git-cbr
(current branch) which prints out the current branch name.
#!/bin/bash
git branch | grep -e "^*"
I put this script in a custom folder (~/.bin
). The folder is in $PATH
.
So now when I'm in a git repo, I just simply type git cbr
to print out the current branch name.
$ git cbr
* master
This works because the git
command takes its first argument and tries to run a script that goes by the name of git-arg1
. For instance, git branch
tries to run a script called git-branch
, etc.
Answered 2023-09-20 20:14:00
Returns either branch name or SHA1 when on detached head:
git rev-parse --abbrev-ref HEAD | grep -v ^HEAD$ || git rev-parse HEAD
This is a short version of @dmaestro12's answer and without tag support.
Answered 2023-09-20 20:14:00
git symbolic-ref --quiet --short HEAD || git rev-parse --short HEAD
- anyone