I just renamed my local branch using
git branch -m oldname newname
but this only renames the local version of the branch. How can I rename the one on GitHub?
I just renamed my local branch using
git branch -m oldname newname
but this only renames the local version of the branch. How can I rename the one on GitHub?
As mentioned, delete the old one on GitHub and re-push, though the commands used are a bit more verbose than necessary:
git push origin :name_of_the_old_branch_on_github
git push origin new_name_of_the_branch_that_is_local
Dissecting the commands a bit, the git push
command is essentially:
git push <remote> <local_branch>:<remote_branch>
So doing a push with no local_branch specified essentially means "take nothing from my local repository, and make it the remote branch". I've always thought this to be completely kludgy, but it's the way it's done.
As of Git 1.7 there is an alternate syntax for deleting a remote branch:
git push origin --delete name_of_the_remote_branch
As mentioned by @void.pointer in the comments
Note that you can combine the 2 push operations:
git push origin :old_branch new_branch
This will both delete the old branch and push the new one.
This can be turned into a simple alias that takes the remote, original branch and new branch name as arguments, in ~/.gitconfig
:
[alias]
branchm = "!git branch -m $2 $3 && git push $1 :$2 $3 -u #"
Usage:
git branchm origin old_branch new_branch
Note that positional arguments in shell commands were problematic in older (pre 2.8?) versions of Git, so the alias might vary according to the Git version. See this discussion for details.
git push origin :old_branch new_branch
. This will both delete the old branch and push the new one. –
Salinasalinas git branch -m new_branch
(rename old_branch to new_branch) 2. git commit -m 'msg'
, 3. git push
4. Mhmm, old_branch shows up in Github, Google question and I am led to your answer 5. git push origin :old_branch
(says it deleted) 6. git push origin new_branch
... completes then says * [new branch] new_branch -> old_branch
. Go back to Github and old_branch
shows up again. If I delete in Github web UI, I have the option to "Restore," so it seems like pushing the new_branch is just restoring. –
Rabi git branch -m oldbranch newbranch; git push origin --delete oldbranch; git push origin newbranch:newbranch
–
Lengthen The following commands worked for me:
git push origin :old-name-of-branch-on-github
git branch -m old-name-of-branch-on-github new-name-for-branch-you-want
git push origin new-name-for-branch-you-want
old-name-of-branch-on-github
? Will they become children of new-name-for-branch-you-want
? –
Overbold I've found three commands on how you can change your Git branch name, and these commands are a faster way to do that:
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 step-by-step you can read this great article:
git push --set-upstream
is the most important part if you happen to change the branch name locally using github app before deleting remote branch. –
Library 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
So the conclusion is:
git branch -m new-name
git push origin :old-name new-name
git push origin -u new-name
git branch -m new-name && git push origin :master new-name
. It will fail. If this answer is only about git and not github then this question is a duplicate of several other questions and should be closed. If it really is about github then the answer has to cover github. This answer does not. –
Circum You can do that without the terminal. You just need to create a branch with the new name, and remove the old after.
Create a branch
In your repository’s branch selector, just start typing a new branch name. It’ll give you the option to create a new branch:
It’ll branch off of your current context. For example, if you’re on the bugfix branch, it’ll create a new branch from bugfix instead of master. Looking at a commit or a tag instead? It’ll branch your code from that specific revision.
Delete a branch
You’ll also see a delete button in your repository’s Branches page:
As an added bonus, it’ll also give you a link to the branch’s Pull Request, if it has one.
I just copy and paste this content from: Create and delete branches
Just remove the old branch and create new one.
Example (solely renaming the remote branch):
git push origin :refs/heads/oldname
git push origin newname:refs/heads/newname
You also probably should rename local branch and change settings for where to push/pull.
git push origin newname:refs/heads/newname
? master and newname may not point to the same commit. –
Kedge git push origin :refs/heads/master
–
Circum On GitHub side, you can use the new (Jan. 2021) "Support for renaming an existing branch" (protected branches can only be renamed by admins, see the end)
Follow this tutorial: https://docs.github.com/en/github/administering-a-repository/renaming-a-branch
See "How do I rename branch on the GitHub website?".
This is a better approach, because renaming a branch that way (on github.com) will (source):
Update Dec. 2021:
Restrict renaming protected branches to admins
Now, only admins can rename branches that are protected by branch protection rules.
GitHub allows repository collaborators to rename every branch in a repository, with the exception of the default branch.
When a collaborator renames a branch, any non-wildcard branch protection rules that apply to that branch are also changed to match the branch's new name.
Because only admins can modify branch protection rules, renaming of a protected branch is now limited to admin users.
For more information, visit Renaming a branch and Managing a branch protection rule.
Simple as that. In order to rename a Git branch locally and remotely use this snippet (tested and works like a charm):
git branch -m <oldBranchName> <newBranchName>
git push origin :<oldBranchName>
git push --set-upstream origin <newBranchName>
Explanation:
Git reference: 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.
Git reference: git push origin :experimental Find a ref that matches experimental in the origin repository (e.g. refs/heads/experimental), and delete it.
Git reference: --set-upstream For every branch that is up to date or successfully pushed, add upstream (tracking) reference, used by argument-less git-pull[1] and other commands. For more information, see branch.<name>.merge in git-config[1].
Here is what worked for me:
Create the new branch first:
git push github newname :refs/heads/newname
On the GitHub site, go to settings and change the Default branch to newname
Delete the oldname
git push github --delete oldname
This is an added condition in Hazarapet Tunanyan's answer.
git branch -m old_branch new_branch # Rename branch locally
git push origin :old_branch # Delete the old branch
# You might be getting an error doing the above step, skip to the next step
git push --set-upstream origin new_branch # Push the new branch, set local branch to track the new remote
You get an error doing git push origin :old_branch
because old_branch you are trying to delete might be the default branch.
Just do the other 2 steps and then goto github and change the default branch from the settings, then you will be able to do git push origin :old_branch
.
Another way is to rename the following files:
.git/refs/head/[branch-name]
to .git/refs/head/new-branch-name
..git/refs/remotes/[all-remote-names]/[branch-name]
to .git/refs/remotes/[all-remote-names]/new-branch-name
.Rename head and remotes both on your local PC and on origins(s)/remote server(s).
If your current branch-name contains slashes (/
) Git will create the directories like so:
current branch-name: "awe/some/branch"
.git/refs/head/awe/some/branch
.git/refs/remotes/[all-remote-names]/awe/some/branch
wish branch-name: "new-branch-name"
branch
file from .git/refs/*/awe/some/
..git/refs/head/
.branch
file from all of .git/refs/remotes/*/awe/some/
..git/refs/remotes/*/
.branch
files to new-branch-name
..git/refs/head/new-branch-name
.git/refs/remotes/[all-remote-names]/new-branch-name
awe/some/branch
to new-branch-name
(local and remote!)Information: This way might not be the best, but it still works for people who might have problems with the other ways
This article shows how to do it real easy.
To rename a local Git branch, we can use the Git branch -m command to modify the name:
git branch -m feature1 feature2
If you’re just looking for the command to rename a remote Git branch, this is it:
git push -u origin feature2:feature3
Check that you have no tags on the branch before you do this. You can do that with git tag
.
In my case, I needed an additional command,
git branch --unset-upstream
to get my renamed branch to push up to origin newname
.
(For ease of typing), I first git checkout oldname
.
Then run the following:
git branch -m newname <br/>
git push origin :oldname*or*
git push origin --delete oldname
git branch --unset-upstream
git push -u origin newname
or git push origin newname
This extra step may only be necessary because I (tend to) set up remote tracking on my branches via git push
-u
origin oldname
. This way, when I have oldname
checked out, I subsequently only need to type git push
rather than git push origin oldname
.
If I do not use the command git branch --unset-upstream
before git push origin newbranch
, git re-creates oldbranch
and pushes newbranch
to origin oldbranch
-- defeating my intent.
You can rename a branch with the GitHub REST API.
And you can easily run API commands via the gh
CLI all like this:
gh api "repos/{owner}/{repo}/branches/{branch}/rename" -f new_name={newBranch}
The following commands rename the branch locally, delete the old branch on the remote location and push the new branch, setting the local branch to track the new remote:
git branch -m old_branch new_branch
git push origin :old_branch
git push --set-upstream origin new_branch
On the Git branch, run:
git branch -m old_name new_name
This will modify the branch name on your local repository:
git push origin :old_name new_name
This will push the modified name to the remote and delete the old branch:
git push origin -u new_name
It sets the local branch to track the remote branch.
This solves the issue.
git push origin head
git branch -m old-branch-name new-branch-name
git push origin head
© 2022 - 2024 — McMap. All rights reserved.