How do I rename both a Git local and remote branch name?

GitRepositoryRenameGit Branch

Git Problem Overview


I have four branches like master -> origin/regacy, FeatureA -> origin/FeatureA. As you can see, I typed the wrong name.

So I want to rename a remote branch name (origin/regacy → origin/legacy or origin/master)

I try the command below:

git remote rename regacy legacy

But Git console returned an error message to me.

 error : Could not rename config section 'remote.regacy' to 'remote.legacy'

How can I solve this problem?

Git Solutions


Solution 1 - Git

schematic, cute git remote graph


There are a few ways to accomplish that:

  1. Change your local branch and then push your changes
  2. Push the branch to remote with the new name while keeping the original name locally
Renaming local and remote
# Rename the local branch to the new name
git branch -m <old_name> <new_name>

# Delete the old branch on remote - where <remote> is, for example, origin
git push <remote> --delete <old_name>

# Or shorter way to delete remote branch [:]
git push <remote> :<old_name>

# Prevent git from using the old name when pushing in the next step.
# Otherwise, git will use the old upstream name instead of <new_name>.
git branch --unset-upstream <new_name>

# Push the new branch to remote
git push <remote> <new_name>

# Reset the upstream branch for the new_name local branch
git push <remote> -u <new_name>

console screenshot


Renaming Only remote branch

Credit: ptim

# In this option, we will push the branch to the remote with the new name
# While keeping the local name as is
git push <remote> <remote>/<old_name>:refs/heads/<new_name> :<old_name>

Important note:

When you use the git branch -m (move), Git is also updating your tracking branch with the new name.

> git remote rename legacy legacy

git remote rename is trying to update your remote section in your configuration file. It will rename the remote with the given name to the new name, but in your case, it did not find any, so the renaming failed.

But it will not do what you think; it will rename your local configuration remote name and not the remote branch. 


Note Git servers might allow you to rename Git branches using the web interface or external programs (like Sourcetree, etc.), but you have to keep in mind that in Git all the work is done locally, so it's recommended to use the above commands to the work.

Solution 2 - Git

If you have named a branch incorrectly AND pushed this to the remote repository follow these steps to rename that branch (based on this article):

  1. Rename your local branch:
    • 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
  1. Delete the old-name remote branch and push the new-name local branch:
    git push origin :old-name new-name

  2. Reset the upstream branch for the new-name local branch:
    Switch to the branch and then:
    git push origin -u new-name

Solution 3 - Git

  • Rename your local branch.

If you are on the branch you want to rename:

git branch -m new-name

if you stay on a different branch at the current time:

git branch -m old-name new-name
  • Delete the old-name remote branch and push the new-name local branch.

Stay on the target branch and:

git push origin :old-name new-name
  • Reset the upstream branch for the new-name local branch.

Switch to the target branch and then:

git push origin -u new-name

Solution 4 - Git

It seems that there is a direct way:

>If you really just want to rename branches remotely (without renaming any local branches at the same time) you can do this with a single command like > >git push <remote> <remote>/<old_name>:refs/heads/<new_name> :<old_name> > > https://stackoverflow.com/questions/4753888/renaming-branches-remotely-in-git/21302474#21302474

See the original answer for more detail.

Solution 5 - Git

Check on which branch you are using the command below

git branch -a 

Checkout to the branch you want to rename

git checkout branch_to_rename

Rename the branch using

git branch -m new_name

Push the changes

git push origin :old_name new_name

Solution 6 - Git

It can also be done the following way.

At first rename local branch, then remote branch.

Renaming the local branch:

If logged in another branch,

git branch -m old_branch new_branch 

If logged in the same branch,

git branch -m new_branch

Renaming remote branch:

git push origin :old_branch    // Delete the remote branch

git push --set-upstream origin new_branch   // Create a new remote branch

Solution 7 - Git

If you have already pushed the wrong name to remote, do the following:

  1. Switch to the local branch you want to rename

    git checkout <old_name>

  2. Rename the local branch

    git branch -m <new_name>

  3. Push the <new_name> local branch and reset the upstream branch

    git push origin -u <new_name>

  4. Delete the <old_name> remote branch

    git push origin --delete <old_name>

This was based on this article.

Solution 8 - Git

Attaching a Simple Snippet for renaming your current branch (local and on origin):

git branch -m <oldBranchName> <newBranchName>
git push origin :<oldBranchName>
git push --set-upstream origin <newBranchName>

Explanation from git docs:

> git branch -m or -M option, will be renamed to > . If had a corresponding reflog, it is renamed > to match , and a reflog entry is created to remember the > branch renaming. If exists, -M must be used to force the > rename to happen. > > The special refspec : (or +: to allow non-fast-forward updates) > directs Git to push "matching" branches: for every branch that exists > on the local side, the remote side is updated if a branch of the same > name already exists on the remote side. > --set-upstream Set up 's tracking information so is considered 's upstream branch. If no is specified, then it defaults to the current branch.

Solution 9 - Git

Another workaround is the following:

  1. Checkout to the branch you want to change
  2. Create a new branch from it
  3. Set upstream to remote
  4. Delete old branch from local and remote

More specifically:

# Checkout to the branch you want to rename
git checkout <old_branch_name>

# Create a new branch from the old one and checkout to it
git checkout -b <new_branch_name>

# Push the new branch to remote
git push -u <origin> HEAD

# Delete local branch
git branch -d <old_branch_name>

# Delete remote branch
git push <origin> -d <old_branch_name>

Solution 10 - Git

There is no direct method,

  1. Rename Local Branch,

    My current branch is master

    git branch -m master_renamed #master_renamed is new name of master

  2. Delete remote branch,

    git push origin --delete master #origin is remote_name

  3. Push renamed branch into remote,

    git push origin master_renamed

That's it...

Solution 11 - Git

This can be done even without renaming the local branch in three simple steps:

  1. Go to your repository in GitHub
  2. Create a new branch from the old branch which you want to rename
  3. Delete the old branch

Solution 12 - Git

I use these git alias and it pretty much does the job automatic:

git config --global alias.move '!git checkout master; git branch -m $1 $2; git status; git push --delete origin $1; git status; git push -u origin $2; git branch -a; exit;'

> Usage: git move FROM_BRANCH TO_BRANCH

It works if you have the default names like master, origin etc. You can modify as you wish but it gives you the idea.

Solution 13 - Git

  1. Rename your local branch. 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

2. Delete the old-name remote branch and push the new-name local branch.

git push origin :old-name new-name

3. Reset the upstream branch for the new-name local branch. Switch to the branch and then:

git push origin -u new-name

All set!

Solution 14 - Git

I had to do the following task to rename local and remote branch:

# Rename the local branch to the new name
git branch -m <old_name> <new_name>

#  Delete the old remote branch
git push origin --delete <old_name>

# push to new remote branch - creates new remote branch
git push origin <new_name>

# set new remote branch as default remote branch for local branch
git branch --set-upstream-to=origin/<new_name> <new_name>

Solution 15 - Git

If you want to use a single command to rename the current branch, like this:

git rename my-new-branch-name

Then, you have to create a file named git-rename, make it executable (chmod +x git-rename) and save it to a folder in your $PATH, containing this:

#!/bin/sh
currentBranch="$(git rev-parse --abbrev-ref HEAD)"
test $# != 1 && cat <<EOF && exit 1
Renames the current branch ($currentBranch) both locally and remotely.
USAGE:
git rename <new branch name>
EOF

newBranch="$1"; shift
git branch -m "$newBranch" && \
git push origin :"$currentBranch" "$newBranch"

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionJayDView Question on Stackoverflow
Solution 1 - GitCodeWizardView Answer on Stackoverflow
Solution 2 - GitZILONG PANView Answer on Stackoverflow
Solution 3 - GitVitalii AndrusishynView Answer on Stackoverflow
Solution 4 - GitptimView Answer on Stackoverflow
Solution 5 - GitGanesh GhugeView Answer on Stackoverflow
Solution 6 - GitAtequer RahmanView Answer on Stackoverflow
Solution 7 - GitmilesmeowView Answer on Stackoverflow
Solution 8 - GitavivamgView Answer on Stackoverflow
Solution 9 - GitvchanView Answer on Stackoverflow
Solution 10 - GitMohideen bin MohammedView Answer on Stackoverflow
Solution 11 - GitVikas YadavView Answer on Stackoverflow
Solution 12 - GitTarikView Answer on Stackoverflow
Solution 13 - GitAnupam MauryaView Answer on Stackoverflow
Solution 14 - GitSebastian ViereckView Answer on Stackoverflow
Solution 15 - GitElifarleyView Answer on Stackoverflow