Failed Attempts to Delete a Remote Branch:
$ git branch -d remotes/origin/bugfix
error: branch 'remotes/origin/bugfix' not found.
$ git branch -d origin/bugfix
error: branch 'origin/bugfix' not found.
$ git branch -rd origin/bugfix
Deleted remote branch origin/bugfix (was 2a14ef7).
$ git push
Everything up-to-date
$ git pull
From github.com:gituser/gitproject
* [new branch] bugfix -> origin/bugfix
Already up-to-date.
How do I properly delete the remotes/origin/bugfix
branch both locally and remotely?
deleted remote-tracking branch
": see github.com/git/git/commit/… - anyone git push -d <remote_name> <branchname>
git branch -d <branchname>
Note: In most cases, <remote_name>
will be origin
.
To delete the local branch, use one of the following:
git branch -d <branch_name>
git branch -D <branch_name>
-d
option is an alias for --delete
, which only deletes the branch if it has already been fully merged in its upstream branch.-D
option is an alias for --delete --force
, which deletes the branch "irrespective of its merged status." [Source: man git-branch
]git branch -d
(delete) learned to honor the -f
(force) flag.As of Git v1.7.0, you can delete a remote branch using
$ git push <remote_name> --delete <branch_name>
which might be easier to remember than
$ git push <remote_name> :<branch_name>
which was added in Git v1.5.0 "to delete a remote branch or a tag."
Starting with Git v2.8.0, you can also use git push
with the -d
option as an alias for --delete
. Therefore, the version of Git you have installed will dictate whether you need to use the easier or harder syntax.
From Chapter 3 of Pro Git by Scott Chacon:
Deleting Remote Branches
Suppose you’re done with a remote branch — say, you and your collaborators are finished with a feature and have merged it into your remote’s main branch (or whatever branch your stable code-line is in). You can delete a remote branch using the rather obtuse syntax
git push [remotename] :[branch]
. If you want to delete yourserverfix
branch from the server, you run the following:$ git push origin :serverfix To git@github.com:schacon/simplegit.git - [deleted] serverfix
Boom. No more branches on your server. You may want to dog-ear this page, because you’ll need that command, and you’ll likely forget the syntax. A way to remember this command is by recalling the
git push [remotename] [localbranch]:[remotebranch]
syntax that we went over a bit earlier. If you leave off the[localbranch]
portion, then you’re basically saying, “Take nothing on my side and make it be[remotebranch]
.”
I ran git push origin :bugfix
, and it worked beautifully. Scott Chacon was right—I will want to dog-ear that page (or virtually dog ear-by answering this on Stack Overflow).
Finally, execute the following on other machines to propagate changes:
# Fetch changes from all remotes and locally delete
# remote deleted branches/tags etc
# --prune will do the job :-;
git fetch --all --prune
Answered 2023-09-20 19:52:47
git fetch --all --prune
on other machines after deleting the remote branch on the server. ||| After deleting the local branch with git branch -d
and deleting the remote branch with git push origin --delete
other machines may still have "obsolete tracking branches" (to see them do git branch -a
). To get rid of these do git fetch --all --prune
. - anyone git branch -a
to view all branches, you can also use git branch -r
to view remote branches only. see also git remote show origin
- source: gitready.com/intermediate/2009/02/13/list-remote-branches.html - anyone git branch -D Branch_Name
to get rid of the local branch - anyone Matthew’s answer is great for removing remote branches and I also appreciate the explanation, but to make a simple distinction between the two commands:
to remove a local branch from your machine: git branch -d {local_branch}
(use -D
instead to force deleting the branch without checking merged status);
to remove a remote branch from the server: git push origin -d {remote_branch}
.
Reference: Git: Delete a branch (local or remote).
Answered 2023-09-20 19:52:47
-D
force deletes, -d
gives you a warning if it's not already merged in. - anyone 'git branch -d your_branch
then you will error like error: The branch 'your_branch' is not fully merged. If you are sure you want to delete it, run 'git branch -D your_branch'.
- anyone git remote prune <name>
(e.g. git remote prune origin
) in order to locally remove stale branches that no longer exist in the remote. - anyone git branch -a --merged origin/master
It will list any branches, both local and remote; that have been merged into master. Additional information here - anyone If you want more detailed explanations of the following commands, then see the long answers in the next section.
git push origin --delete <branch> # Git version 1.7.0 or newer
git push origin -d <branch> # Shorter version (Git 1.7.0 or newer)
git push origin :<branch> # Git versions older than 1.7.0
git branch --delete <branch>
git branch -d <branch> # Shorter version
git branch -D <branch> # Force-delete un-merged branches
git branch --delete --remotes <remote>/<branch>
git branch -dr <remote>/<branch> # Shorter
git fetch <remote> --prune # Delete multiple obsolete remote-tracking branches
git fetch <remote> -p # Shorter
When you're dealing with deleting branches both locally and remotely, keep in mind that there are three different branches involved:
X
.X
.origin/X
that tracks the remote branch X
.The original poster used:
git branch -rd origin/bugfix
Which only deleted his local remote-tracking branch origin/bugfix
, and not the actual remote branch bugfix
on origin
.
To delete that actual remote branch, you need
git push origin --delete bugfix
The following sections describe additional details to consider when deleting your remote and remote-tracking branches.
Note that deleting the remote branch X
from the command line using a git push
will also remove the local remote-tracking branch origin/X
, so it is not necessary to prune the obsolete remote-tracking branch with git fetch --prune
or git fetch -p
. However, it wouldn't hurt if you did it anyway.
You can verify that the remote-tracking branch origin/X
was also deleted by running the following:
# View just remote-tracking branches
git branch --remotes
git branch -r
# View both strictly local as well as remote-tracking branches
git branch --all
git branch -a
If you didn't delete your remote branch X
from the command line (like above), then your local repository will still contain (a now obsolete) remote-tracking branch origin/X
. This can happen if you deleted a remote branch directly through GitHub's web interface, for example.
A typical way to remove these obsolete remote-tracking branches (since Git version 1.6.6) is to simply run git fetch
with the --prune
or shorter -p
. Note that this removes all obsolete local remote-tracking branches for any remote branches that no longer exist on the remote:
git fetch origin --prune
git fetch origin -p # Shorter
Here is the relevant quote from the 1.6.6 release notes (emphasis mine):
"git fetch" learned
--all
and--multiple
options, to run fetch from many repositories, and--prune
option to remove remote tracking branches that went stale. These make "git remote update" and "git remote prune" less necessary (there is no plan to remove "remote update" nor "remote prune", though).
Alternatively, instead of pruning your obsolete local remote-tracking branches through git fetch -p
, you can avoid making the extra network operation by just manually removing the branch(es) with the --remotes
or -r
flags:
git branch --delete --remotes origin/X
git branch -dr origin/X # Shorter
Answered 2023-09-20 19:52:47
X
and origin/X
bookmarks in the local clone (2 branches), and then there is X
on the remote (making 3 branches). - anyone git push origin --delete <branch>
, as far as I can tell, ALSO deletes the locally-stored remote-tracking branch named origin/branch
. So, to delete the remote branch AND locally-stored remote-tracking branch in one command, just use git push origin --delete <branch>
. Then, you just need to delete the local branch with git branch -D branch
. That covers the deletion of all 3 branches with only 2 commands. - anyone For deleting the remote branch:
git push origin --delete <your_branch>
For deleting the local branch, you have three ways:
1: git branch -D <branch_name>
2: git branch --delete --force <branch_name> # Same as -D
3: git branch --delete <branch_name> # Error on unmerge
Explain: OK, just explain what's going on here!
Simply do git push origin --delete
to delete your remote branch only, add the name of the branch at the end and this will delete and push it to remote at the same time...
Also, git branch -D
, which simply delete the local branch only!...
-D
stands for --delete --force
which will delete the branch even it's not merged (force delete), but you can also use -d
which stands for --delete
which throw an error respective of the branch merge status...
I also create the image below to show the steps:
Answered 2023-09-20 19:52:47
git branch -a
will display local and remote branches.It will be help for you diagram introduce. - anyone git remote prune origin
Your local copies of deleted branches are not removed by this. The same effect is achieved by using git fetch --prune
- anyone You can also use the following to delete the remote branch
git push --delete origin serverfix
Which does the same thing as
git push origin :serverfix
but it may be easier to remember.
Answered 2023-09-20 19:52:47
git branch -d <local_branch>
or git branch -D <local_branch>
for force deleting - anyone It's very simple:
To delete the remote branch
git push -d origin <branch-name>
Or
git push origin :<branch-name>
-- You can also delete tags with this syntax
To forcefully delete local branch
git branch -D <branch-name>
Note: do a git fetch --all --prune
on other machines after deleting remote branch, to remove obsolete tracking branches.
Example
to remove local branch
git branch -D my-local-branch
to remove remote branch
git push origin :my-remote-branch
With the new version of git, its also possible to remove branch with
git push origin --delete <branch_name>
TIP:
if you want to see all available branches you can use git branch -a
,
and to see just remote branches, you can use git branch -r
Answered 2023-09-20 19:52:47
--delete
instead of -d
to delete remote branch. - anyone -d
option is an alias for --delete
and if --delete
work then -d
should also work, if you forcefully want to delete a branch you can use -D
instead of -d
or --delete
. - anyone -d
does not work for me. The terminal tell me to use -D
instead - anyone Tip: When you delete branches using
git branch -d <branchname> # Deletes local branch
or
git push origin :<branchname> # Deletes remote branch
only the references are deleted. Even though the branch is actually removed on the remote, the references to it still exists in the local repositories of your team members. This means that for other team members the deleted branches are still visible when they do a git branch -a
.
To solve this, your team members can prune the deleted branches with
git remote prune <repository>
This is typically git remote prune origin
.
Answered 2023-09-20 19:52:47
git push
operation deletes the local branch and the remote branch. - anyone git remote prune
is a somewhat obsolete way to remove obsolete remote-tracking branches, the newer way to do it is to use git fetch --prune
or git fetch -p
. - anyone If you want to delete a branch, first checkout to the branch other than the branch to be deleted.
git checkout other_than_branch_to_be_deleted
Deleting the local branch:
git branch -D branch_to_be_deleted
Deleting the remote branch:
git push origin --delete branch_to_be_deleted
Answered 2023-09-20 19:52:47
git branch -D <name-of-branch>
git branch -D -r origin/<name-of-branch>
git push origin :<name-of-branch>
Answered 2023-09-20 19:52:47
-D
forces the deletion. It's always better to use -d
, which will remind if you need to do something dangerous. - anyone This is simple: Just run the following command:
To delete a Git branch both locally and remotely, first delete the local branch using this command:
git branch -d example
(Here example
is the branch name.)
And after that, delete the remote branch using this command:
git push origin :example
Answered 2023-09-20 19:52:47
Another approach is:
git push --prune origin
WARNING: This will delete all remote branches that do not exist locally. Or more comprehensively,
git push --mirror
will effectively make the remote repository look like the local copy of the repository (local heads, remotes and tags are mirrored on remote).
Answered 2023-09-20 19:52:47
I use the following in my Bash settings:
alias git-shoot="git push origin --delete"
Then you can call:
git-shoot branchname
Answered 2023-09-20 19:52:47
git push origin --delete $1
in a file on your path called git-shoot
and git shoot branchname
will work too. - anyone Delete locally:
To delete a local branch, you can use:
git branch -d <branch_name>
To delete a branch forcibly, use -D
instead of -d
.
git branch -D <branch_name>
Delete remotely:
There are two options:
git push origin :branchname
git push origin --delete branchname
I would suggest you use the second way as it is more intuitive.
Answered 2023-09-20 19:52:47
If you want to complete both these steps with a single command, you can make an alias for it by adding the below to your ~/.gitconfig
:
[alias]
rmbranch = "!f(){ git branch -d ${1} && git push origin --delete ${1}; };f"
Alternatively, you can add this to your global configuration from the command line using
git config --global alias.rmbranch \
'!f(){ git branch -d ${1} && git push origin --delete ${1}; };f'
NOTE: If using -d
(lowercase d), the branch will only be deleted if it has been merged. To force the delete to happen, you will need to use -D
(uppercase D).
Answered 2023-09-20 19:52:47
&&
with ;
so that even if the first command fails the second will still execute (sometimes only local or only remote exists). - anyone Since January 2013, GitHub included a Delete branch button next to each branch in your "Branches" page.
Relevant blog post: Create and delete branches
Answered 2023-09-20 19:52:47
To delete your branch locally and remotely
Checkout to master branch - git checkout master
Delete your remote branch - git push origin --delete <branch-name>
Delete your local branch - git branch --delete <branch-name>
Answered 2023-09-20 19:52:47
You can also do this using git remote prune origin
$ git remote prune origin
Pruning origin
URL: git@example.com/yourrepo.git
* [pruned] origin/some-branchs
It prunes and deletes remote-tracking branches from a git branch -r
listing.
Answered 2023-09-20 19:52:47
In addition to the other answers, I often use the git_remote_branch tool. It's an extra install, but it gets you a convenient way to interact with remote branches. In this case, to delete:
grb delete branch
I find that I also use the publish
and track
commands quite often.
Answered 2023-09-20 19:52:47
A one-liner command to delete both local, and remote:
D=branch-name; git branch -D $D; git push origin :$D
Or add the alias below to your ~/.gitconfig. Usage: git kill branch-name
[alias]
kill = "!f(){ git branch -D \"$1\"; git push origin --delete \"$1\"; };f"
Answered 2023-09-20 19:52:47
git branch -D
carefully in a script, since it force-deletes a branch without checking it has been merged. Use -d
to be safe. - anyone Let's assume our work on branch "contact-form" is done and we've already integrated it into "master". Since we don't need it anymore, we can delete it (locally):
$ git branch -d contact-form
And for deleting the remote branch:
git push origin --delete contact-form
Answered 2023-09-20 19:52:47
To delete locally - (normal)
git branch -d my_branch
If your branch is in a rebasing/merging progress and that was not done properly, it means you will get an error, Rebase/Merge in progress
, so in that case, you won't be able to delete your branch.
So either you need to solve the rebasing/merging. Otherwise, you can do force delete by using,
git branch -D my_branch
To delete in remote:
git push --delete origin my_branch
You can do the same using:
git push origin :my_branch # Easy to remember both will do the same.
Graphical representation:
Answered 2023-09-20 19:52:47
Delete remote branch
git push origin :<branchname>
Delete local branch
git branch -D <branchname>
Delete local branch steps:
Answered 2023-09-20 19:52:47
git push origin :<branchname>
already pushes an 'empty` branch to the remote (hence deletes the remote branch) - anyone Simply say:
git branch -d <branch-name>
git push origin :<branch-name>
Answered 2023-09-20 19:52:47
Now you can do it with the GitHub Desktop application.
After launching the application
Switch to the branch you would like to delete
From the "Branch" menu, select, "Unpublish...", to have the branch deleted from the GitHub servers.
From the "Branch" menu, select, 'Delete "branch_name"...', to have the branch deleted off of your local machine (AKA the machine you are currently working on)
Answered 2023-09-20 19:52:47
git push origin --delete <branch Name>
is easier to remember than
git push origin :branchName
Answered 2023-09-20 19:52:47
This won't work if you have a tag with the same name as the branch on the remote:
$ git push origin :branch-or-tag-name
error: dst refspec branch-or-tag-name matches more than one.
error: failed to push some refs to 'git@github.com:SomeName/some-repo.git'
In that case you need to specify that you want to delete the branch, not the tag:
git push origin :refs/heads/branch-or-tag-name
Similarly, to delete the tag instead of the branch you would use:
git push origin :refs/tags/branch-or-tag-name
Answered 2023-09-20 19:52:47
:
and why it deletes
- anyone error: failed to push some refs to 'https://github.com/tik9/tik9.github.io'
when git push origin :refs/heads/main
. Probably github
is the culprit. - anyone remote: ! Push rejected, cannot delete main branch
- anyone Many of the other answers will lead to errors/warnings. This approach is relatively fool proof although you may still need git branch -D branch_to_delete
if it's not fully merged into some_other_branch
, for example.
git checkout some_other_branch
git push origin :branch_to_delete
git branch -d branch_to_delete
Remote pruning isn't needed if you deleted the remote branch. It's only used to get the most up-to-date remotes available on a repository you're tracking. I've observed git fetch
will add remotes, not remove them. Here's an example of when git remote prune origin
will actually do something:
User A does the steps above. User B would run the following commands to see the most up-to-date remote branches:
git fetch
git remote prune origin
git branch -r
Answered 2023-09-20 19:52:47
According to the latest document using a terminal we can delete in the following way.
Delete in local:
git branch -D usermanagement
Delete in remote location:
git push --delete origin usermanagement
Answered 2023-09-20 19:52:47
git
command is so inconsistent and unintuitive to remember. Looks at the deletion, one is -D
, another one is -d|--delete
- anyone -d, --delete
option. -D
is shortcut for --delete --force
. - anyone I got sick of googling for this answer, so I took a similar approach to the answer that crizCraig posted earlier.
I added the following to my Bash profile:
function gitdelete(){
git push origin --delete $1
git branch -D $1
}
Then every time I'm done with a branch (merged into master
, for example) I run the following in my terminal:
gitdelete my-branch-name
...which then deletes my-branch-name
from origin
as as well as locally.
Answered 2023-09-20 19:52:47
--delete "$@"
and -D "$@"
instead of $1
will handle it for multiple branches. - anyone git branch -d
(with lowercase 'd') first to ensure changes have been merged, and then push if successful (put &&
in between commands) - anyone Use:
git push origin :bugfix # Deletes remote branch
git branch -d bugfix # Must delete local branch manually
If you are sure you want to delete it, run
git branch -D bugfix
Now to clean up deleted remote branches run
git remote prune origin
Answered 2023-09-20 19:52:47