gitrepositoryrenamegit-branch

git: how to rename a branch (both local and remote)?


I have a local branch master that points to a remote branch origin/regacy (oops, typo!).

How do I rename the remote branch to origin/legacy or origin/master?

I tried:

git remote rename regacy legacy

But this gave an error:

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


Solution

  • 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

    # Names of things - allows you to copy/paste commands
    old_name=feature/old
    new_name=feature/new
    remote=origin
    
    # Rename the local branch to the new name
    git branch -m $old_name $new_name
    
    # Delete the old branch on remote
    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.