How do I rename a local Git branch?

How do I rename a local Git branch?



I don't want to rename a remote branch, as described in Rename master branch for both local and remote Git repositories.



How can I rename a local branch which hasn't been pushed to a remote branch?




30 Answers
30



If you want to rename a branch while pointed to any branch, do:


git branch -m <oldname> <newname>



If you want to rename the current branch, you can do:


git branch -m <newname>



A way to remember this, is -m is for "move" (or mv), which is how you rename files.


-m


mv





What I really wanted to know was whether this will necessarily effect the remote branch when/if you push
– PandaWood
Jan 23 '12 at 0:15





@PandaWood: it will add the new branch when you push, but won't delete the old branch. If you use git push -f --mirror, then it will rename the branch on the remote, but you should only use this method if the remote is simply to be a copy of your current repository. See also this question: stackoverflow.com/questions/1526794/git-rename-remote-branch
– siride
Jan 23 '12 at 6:02


git push -f --mirror





@PandaWood, it depends on how push.default is configured. By default (matching) it will push to a remote whose name matches. You would have to do git push origin <newname>:<oldname> or you will create a new remote branch. However, if push.default is set to upstream, then you can push origin head and things will go to the oldname on the remote.
– Erin Stanfill
Oct 31 '13 at 23:46



push.default


matching


git push origin <newname>:<oldname>


push.default


upstream


push origin head





@NightOwl888: the -m probably is short for "move", following the Unix convention of using the mv to rename files. The reason for this is that moving and renaming, in a directory-based inode file system, are entirely equivalent.
– siride
Sep 3 '14 at 2:27


mv





The long name of the -m option is --move, e.g., git branch --move master renames the current branch to be called "master".
– robenk
Sep 22 '15 at 17:56


-m


--move


git branch --move master


git branch -m old_branch_name new_branch_name



The above command will change your branch name, but you have to be very careful using the renamed branch, because it will still refer to the old upstream branch associated with it, if any.



If you want to push some changes into master after your local branch is renamed into new_branch_name (example name):



git push origin new_branch_name:master (now changes will go to master branch but your local branch name is new_branch_name)


git push origin new_branch_name:master



For more details, see "How to rename your local branch name in Git."



To rename your current branch:


git branch -m <newname>





You will need to use -M to rename if you are only changing capitalization, as git will tell you that branch already exists.
– cjspurgeon
May 8 '15 at 21:04





You saved me with this comment.
– jpadilladev
Jun 19 at 15:12





@cjspurgeon Git keeps on amazing me by being so intuitive, to an unexpected extent. Since years.
– 0xc0de
Jul 16 at 6:16



Here are the steps to rename the branch:


1. switch to branch which needs to be renamed
2. git branch -m <new_name>
3. git push origin :<old_name>
4. git push origin <new_name>:refs/heads/<new_name>



EDIT(12/01/2017) : Make sure you run command git status and check that newly created branch is pointing to its own ref and not older one. If you find the reference to older branch, you need to unset the upstream using:


git status


git branch --unset-upstream





In which step would one unset the upstream? Before step 4?
– Cyclonecode
Jul 1 at 7:06





@Cyclonecode: yes. after step 4. But make sure you run git status to check if its has reference to old branch.
– Milind Anantwar
Jul 1 at 13:50



Rename the branch will be useful once your branch is finished. Then new stuff is coming, and you want to develop in the same branch instead of deleting it and create the new one.



From my experience, to rename a local and remote branch in Git you should do the following steps.



Quoting from Multiple States - Rename a local and remote branch in
git



If you are on the branch you want to rename:


git branch -m new-name



If you are on a different branch:


git branch -m old-name new-name


git push origin :old-name new-name


git push origin -u new-name





This one worked better for me. Here the 2 steps gave me the following errors: error: dst ref refs/heads/<old-name> receives from more than one src.; error: failed to push some refs to 'git@uri:foo/bar.git'
– Anto
Feb 23 at 15:26


error: dst ref refs/heads/<old-name> receives from more than one src.; error: failed to push some refs to 'git@uri:foo/bar.git'





You got the problem when running the command git push origin :old-name new-name right?
– trungk18
Feb 23 at 15:28


git push origin :old-name new-name





Yep exactly (sorry I meant "2nd step", not "2 steps" -- tired)
– Anto
Feb 23 at 16:28



The answers so far have been correct but here is some additional info:
One can rename a branch with '-m' (move), but one has to be careful, because '-M' forces the rename, even if there is an existing branch with the same name already. Here is the excerpt from the 'git-branch' man page:



With a -m or -M option, <oldbranch> will be renamed to <newbranch>. If <oldbranch> had a corresponding reflog, it is renamed to match <newbranch>, and a reflog entry is created to remember the branch renaming. If <newbranch> exists, -M must be used to force the rename to happen.


<oldbranch>


<newbranch>


<oldbranch>


<newbranch>


<newbranch>





What happens to the overwritten branch?
– Kevin Dice
Jun 22 '15 at 20:06





It is overwritten by the new name/branch. For example if you have the following branches in git: master b1 <-- current branch b2 after you do 'git branch -M b2' you will only have: master b2 <-- current branch b1 will be gone and if you wish to recover it you should check it out by its hash. You can see it by typing 'git reflog'. Cheers.
– Vanchev
Jun 26 '15 at 16:48






The -M flag is also useful to force a rename if you are just correcting the case of the branch name, e.g. changing myBranch to MyBranch. (With -m, git returns fatal: A branch named 'MyBranch' already exists.)
– Jon Schneider
Feb 14 at 20:10



-M


myBranch


MyBranch


-m


fatal: A branch named 'MyBranch' already exists.



If it is your current branch, just do


git branch -m new_name



If it is another branch you want to rename


git branch -m old_name new_name



- If your branch was pushed, then after renaming you need to delete it from the remote Git repository and ask your new local to track a new remote branch:


git push origin :old_name
git push --set-upstream origin new_name



I foolishly named a branch starting with a hyphen, and then checked out master. I didn't want to delete my branch, I had work in it.



Neither of these worked:



git checkout -dumb-name


git checkout -dumb-name



git checkout -- -dumb-name


git checkout -- -dumb-name



"s, 's and s didn't help either. git branch -m doesn't work.


"


'



git branch -m



Here's how I finally fixed it. Go into your working copy's .git/refs/heads, find the filename "-dumb-name", get the hash of the branch. Then this will check it out, make a new branch with a sane name, and delete the old one.


git checkout hash
git checkout -b brilliant-name
git branch -d -- -dumb-name





Couldn't you just have renamed the file in refs/heads?
– android.weasel
Nov 13 '13 at 18:07





Ditto. If you have to dig into the directory structure to do this magic, go all the way and do a 'mv -- -dumb-name brilliant-name' Do a 'git branch -av' and you'll see an directory structure of .git/refs. Or maybe 'grep -R ^ .git/refs' to see the hashes directly.
– Dave X
Dec 19 '13 at 17:15





You could probably have used reflog
– Code Whisperer
Jan 14 '15 at 20:27


reflog





Honestly, if that's the route you wanted to take, I'd avoid the (IMO confusing and potentially dangerous if you don't know what you're doing) jaunt through .git directory in the first place, and just do it with some normal commands with some "git log" parsing (using appropriate flags to show branches, and to figure out which shasum you want to checkout a new branch from), and then do it. Then, remove the wonky-named branch. I despise that git insists that you need to understand all of its inner workings to do some things, but greatly appreciate that you can do those things.
– Jon V
Feb 27 '16 at 14:37





It's harder to create a branch with a bad name in 2.10.1+. If you do somehow do it, you can use git branch -v to get the short hash version of your branches(add -r for remote). You can then use git rev-parse <shorthash> to get the full hash if you need it.
– House of Dexter
Mar 6 '17 at 17:19




To rename a branch locally:


git branch -m [old-branch] [new-branch]



Now you'll have to propagate these changes on your remote server as well.



To push changes of the deleted old branch:


git push origin :[old-branch]



To push changes of creation of new branch:


git push origin [new-branch]



Rename the branch using this command:


git branch -m [old_branch_name] [new_branch_name]



-m: It renames/moves the branch. If there is already a branch, you will get an error.


-m



If there is already a branch and you want to rename with that branch, use:


git rename -M [old_branch_name] [new_branch_name]



For more information about help, use this command in the terminal:


git branch --help



or


man git branch



Advanced Git users can rename manually:


Rename the old branch under .git/refs/heads to the new name

Rename the old branch under .git/logs/refs/heads to the new name

Update the .git/HEAD to point to yout new branch name



Probably as mentioned by others, this will be a case mismatch in branch naming.



If you have such a situation, I can guess that you're on Windows which will also lead you to:


$ git branch -m CaseSensitive casesensitive
fatal: A branch named 'casesensitive' already exists.



Then you have to do an intermediate step:


$ git branch -m temporary
$ git branch -m casesensitive



Nothing more.





Note that this situation might also arise on a Mac, which is also (exceptionally annoyingly) case insensitive in its file system.
– Jon V
Feb 27 '16 at 14:41





Alternatively, you can use -M instead of -m to do this kind of "casing fix" rename in a single step.
– Jon Schneider
Feb 14 at 20:09


-M


-m



Here are three steps: A command that you can call inside your terminal and change branch name.


git branch -m old_branch new_branch # Rename branch locally
git push origin :old_branch # Delete the old branch
git push --set-upstream origin new_branch # Push the new branch, set local branch to track the new remote



If you need more: step-by-step, How To Change Git Branch Name is a good article about that.



Trying to answer specifically to the question (at least the title).



You can also rename local branch, but keeps tracking the old name on the remote.


git branch -m old_branch new_branch
git push --set-upstream origin new_branch:old_branch



Now, when you run git push, the remote old_branch ref is updated with your local new_branch.


git push


old_branch


new_branch



You have to know and remember this configuration. But it can be useful if you don't have the choice for the remote branch name, but you don't like it (oh, I mean, you've got a very good reason not to like it !) and prefer a clearer name for your local branch.



Playing with the fetch configuration, you can even rename the local remote-reference. i.e, having a refs/remote/origin/new_branch ref pointer to the branch, that is in fact the old_branch on origin. However, I highly discourage this, for the safety of your mind.


refs/remote/origin/new_branch


old_branch


origin



To rename current branch (except for detached HEAD state) you can also use this alias:


[alias]
mvh = !sh -c 'git branch -m `git rev-parse --abbrev-ref HEAD` $1'



Another option is not to use the command line at all. Git GUI clients such as SourceTree take away much of the syntactical learning curve / pain that causes questions such as this one to be amongst the most viewed on Stack Overflow.



In SourceTree, right click on any local branch in the "Branches" pane on the left and select "Rename ...".





I wouldn't call it pain. The git command is very easy to use, once you've seen this answer, you'll probably never come back again. The problem is more that, so it seems, the documentation of the git command-line isn't intuitive enough.
– Nearoo
Mar 8 '15 at 17:05





True but with SourceTree I hardly ever need to worry about checking documentation. Everything is generally intuitive - just right click and see what the options are. (BTW I'm not affiliated with them in any way - just like the tool!)
– Steve Chambers
Mar 8 '15 at 17:17




If you are willing to use to use SourceTree (which I strongly recommend) you can right click your branch and chose 'Rename'.



enter image description here



Since you do not want to push the branch to a remote server, this example will be useful:



Let's say you have an existing branch called "my-hot-feature," and you want to rename it to "feature-15."



First, you want to change your local branch. This couldn't be easier:


git branch -m my-hot-feature feature-15



For more information, you can visit Locally and Remotely Renaming a Branch in Git.



Changing the branch locally is quite easy...



If you are on the branch you want to change the name, simply do this:


git branch -m my_new_branch



Otherwise, if you are on master or any other branch other than the one you'd like to change the name, simply do:


master


git branch -m my_old_branch my_new_branch



Also, I create the image below to show this in action in a command line, in this case, you are on master branch for example:


master



Change branch name locally



If you are on the branch you want to rename:


git branch -m new-name



If you are on a different branch:


git branch -m old-name new-name



git push origin :old-name new-name


git push origin :old-name new-name



git push origin -u new-name


git push origin -u new-name



Or you as a fast way to do that, you can use these 3 steps: command in your terminal



# Rename branch locally


git branch -m old_branch new_branch



# Delete the old branch


git push origin :old_branch



# Push the new branch, set local branch to track the new remote


git push --set-upstream origin new_branch



Referance: https://www.w3docs.com/snippets/git/how-to-rename-git-local-and-remote-branches.html



git version 2.9.2



If you want to change the name of the local branch you are on:


git branch -m new_name



If you want to change the name of a different branch:


git branch -m old_name new_name



If you want to change the name of a different branch to a name that already exists:


git branch -M old_name new_name_that_already_exists



Note: The last command is destructive and will rename your branch, but you will lose the old branch with that name and those commits because branch names must be unique.



If you want to change the name of the current branch, run:


git branch -m [old_branch] [new_branch]



If you want to delete the old remote branch, run:


git push origin :[old_branch]



If you want to delete the old remote branch and create a new remote branch, run:


git push origin :old_branch new_branch



Simple way to do it :


git branch -m old_branch new_branch # Rename branch locally
git push origin :old_branch # Delete the old branch
git push --set-upstream origin new_branch # Push the new branch, set local branch to track the new remote



For more, see this.



All of the above are talking about git branch -m.Of course, it's easy to operate, but for me, it may be a little hard to remember another git command. So I tried to get the work down by the command I was familiar with.Yeah, you may guessed it.


git branch -m



I use git branch -b <new_branch_name>.And if you don't want to save the old branch now you can execute git branch -D <old_branch_name> to remove it.


git branch -b <new_branch_name>


git branch -D <old_branch_name>



I know it may be a little tedious but it's easier to understood and remember.Hope it‘s helpful for you.



git branch rename can be done by using



git branch -m oldBranch newBranch


git branch -m oldBranch newBranch



git branch -M oldBranch ExistingBranch


git branch -M oldBranch ExistingBranch



Difference between -m and -M ,



-m: if your trying to rename your branch with exising branch name using -m
it will raise an error says, branch already exist. you need to give unique name.



but,



-M: this will help you to force rename with given name even it is exist. so existing branch will overwrite entirely with it...



Here is git terminal example,


mohideen@dev:~/project/myapp/sunithamakeup$ git branch
master
master0
new_master
test
* test1
mohideen@dev:~/project/myapp/sunithamakeup$ git branch -m test1 test
fatal: A branch named 'test' already exists.
mohideen@dev:~/project/myapp/sunithamakeup$ git branch -M test1 test
mohideen@dev:~/project/myapp/sunithamakeup$ git branch
master
master0
new_master
* test
mohideen@dev:~/project/myapp/sunithamakeup$



Rename branch:



git branch -m old_branchname new_branchname


git branch -m old_branchname new_branchname



here The long name of the -m option is --move. So we can also use



git branch --move old_branchname new_branchname


git branch --move old_branchname new_branchname



If you wan to rename the current branch thrn use this.


git branch -m new_branchname



or


git branch -move new_branchname



If you want to move this changes to remote Then use the following.


git push origin :old_branchname new_branchname



This will delete the old_branchname remote branch and push the new_branchname local branch.


git push origin -u new_branchname



This will reset the upstream branch for the new_branchname local branch.



PHPStorm:



VCS->Git->Branches...->Local Branches->_your_branch_->Rename



If you want to:


git branch -m <oldname> <newname>


git push origin: old-name new-name


git commit <newname>


git push origin new_branch_name:master


git status


git checkout



git branch -m old_branch_name new_branch_name



OR



git branch --move old_branch_name new_branch_name



If you want to change the branch name locally from the list of branches.



Example: Let my branch name is "demo" i want to rename this to "test" you can do like this :


// git branch -m <oldname> <newname>

$ git branch -m demo test



If you want to rename the current branch, you can do like this :


// git branch -m <newname>

$ git branch -m test




Thank you for your interest in this question.
Because it has attracted low-quality or spam answers that had to be removed, posting an answer now requires 10 reputation on this site (the association bonus does not count).



Would you like to answer one of these unanswered questions instead?

Popular posts from this blog

ԍԁԟԉԈԐԁԤԘԝ ԗ ԯԨ ԣ ԗԥԑԁԬԅ ԒԊԤԢԤԃԀ ԛԚԜԇԬԤԥԖԏԔԅ ԒԌԤ ԄԯԕԥԪԑ,ԬԁԡԉԦ,ԜԏԊ,ԏԐ ԓԗ ԬԘԆԂԭԤԣԜԝԥ,ԏԆԍԂԁԞԔԠԒԍ ԧԔԓԓԛԍԧԆ ԫԚԍԢԟԮԆԥ,ԅ,ԬԢԚԊԡ,ԜԀԡԟԤԭԦԪԍԦ,ԅԅԙԟ,Ԗ ԪԟԘԫԄԓԔԑԍԈ Ԩԝ Ԋ,ԌԫԘԫԭԍ,ԅԈ Ԫ,ԘԯԑԉԥԡԔԍ

How to change the default border color of fbox? [duplicate]

Henj