Delete Local Branch
To delete the local branch use one of the following:
$ git branch -d branch_name
$ git branch -D branch_name
Note: The -d
option is an alias for --delete
, which only deletes the branch if it has already been fully merged in its upstream branch. You could also use -D
, which is an alias for --delete --force
, which deletes the branch “irrespective of its merged status.” [Source: man git-branch
]
Also note that git branch -d branch_name
will fail if you are currently in the branch you want to remove. The message starts with error: Cannot delete the branch 'branch_name'
. If so, first switch to some other branch, for example: git checkout main
.
If you want more detailed explanations of the following commands, then see the long answers in the next section.
- How do I undo ‘git add’ before commit?
- How do I delete a Git branch locally and remotely?
- How do I check out a remote Git branch?
- Git: How do I force “git pull” to overwrite local files?
- How do I check out a remote Git branch?
- How do I undo ‘git add’ before commit?
- How do I undo the most recent local commits in Git?
- How to resolve merge conflicts in a Git repository
Deleting a remote branch
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
Deleting a local branch
git branch --delete <branch>
git branch -d <branch> # Shorter version
git branch -D <branch> # Force-delete un-merged branches
Deleting a local remote-tracking branch
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
Pushing to delete remote branches also removes 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
Pruning the obsolete local remote-tracking branch origin/X
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).
Alternative to above automatic pruning for obsolete remote-tracking branches
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 --remote
or -r
flags:
git branch --delete --remotes origin/X
git branch -dr origin/X # Shorter