Rename a Git branch locally and remotely?
GitGit BranchGit Problem Overview
Is there a way to rename a Git branch locally and push it to the remote branch, even if there are already many commits pushed to the remote branch?
Or, is it necessary to create a new local branch, delete the old local branch, and then repeat the operation on the remote repository?
Git Solutions
Solution 1 - Git
Yes,
the feature move
exists to rename the branch locally
git branch --move <old_name> <new_name>
but to push it, you must delete the old and push the new
git checkout <new_name>
git push origin [--set-upstream] <new_name>
git push origin --delete <old_name>
> --set-upstream
is optional, it configure the new local branch to track the pushed one
You can use the following shorthands:
-
move locally (--move) :
git branch -m <old_name> <new_name>
-
push new branch (--set-upstream, optional) :
git push origin [-u] <new_name>
-
delete (--delete) :
git push origin -d <old_name>
NB.
Thanks to torek's comment:
Worth mentioning, by the way, is that you should
- notify other users who share the upstream that you will be doing this, and
- do this in the order shown (set new name, then delete old).
The reason for #1 is that those users will need to adjust.
The reason for #2 is mainly just efficiency: it avoids having to re-copy objects to an upstream repo that drops commits on branch deletion (most bare repositories do that, and most repositories that accept pushes are bare)