A convenient command-line tool helping you keep repositories clean.
# pip install git-delete-merged-branchesIf you are using one of the distributions below, you can install git-delete-merged-branches through the respective package manager, e.g.:
| Distribution | Command |
|---|---|
| Arch Linux (AUR) | yay -S git-delete-merged-branches |
| Debian GNU/Linux (>=bookworm) | apt install git-delete-merged-branches |
| Gentoo Linux | emerge -av dev-vcs/git-delete-merged-branches |
| Homebrew | brew install git-delete-merged-branches |
| MacPorts | port install py-git-delete-merged-branches |
| NixOS | nix-shell -p git-delete-merged-branches |
| Ubuntu (>=lunar/23.04) | apt install git-delete-merged-branches |
| Void Linux | xbps-install -S git-delete-merged-branches |
# git-delete-merged-branches Do you want to run "git remote update --prune" for 1 remote(s): - origin Update? [y/N] y Do you want to run "git pull --ff-only" for 1 branch(es): - master Pull? [y/N] y You are about to delete 6 local branch(es): - improve-setup-py - issue-12-enable-ci-for-pull-requests - issue-5-fix-waste-of-one-second-per-service - keep-github-actions-up-to-date - refactoring-one - simple-ci Delete? [y/N] y 6 local branch(es) deleted. You are about to delete 6 remote branch(es): - origin/improve-setup-py - origin/issue-12-enable-ci-for-pull-requests - origin/issue-5-fix-waste-of-one-second-per-service - origin/keep-github-actions-up-to-date - origin/refactoring-one - origin/simple-ci Delete? [y/N] y To github.com:hartwork/wait-for-it.git - [deleted] improve-setup-py - [deleted] issue-12-enable-ci-for-pull-requests - [deleted] issue-5-fix-waste-of-one-second-per-service - [deleted] keep-github-actions-up-to-date - [deleted] refactoring-one - [deleted] simple-ci 6 remote branch(es) deleted.- Supports deletion of both local and remote branches
- Detects multiple forms of de-facto merges (rebase merges, squash merges (needs
--effort=3), single or range cherry-picks… leveraginggit cherry) - Supports workflows with multiple release branches, e.g. only delete branches that have been merged to all of
master,devandstaging - Quick interactive configuration
- Provider agnostic: Works with GitHub, GitLab, Gitea and any other Git hosting
- Takes safety seriously
Deletion is a sharp knife that requires care. While git reflog would have your back in most cases, git-delete-merged-branches takes safety seriously.
Here's what git-delete-merged-branches does for your safety:
- No branches are deleted without confirmation or passing
--yes. - Confirmation defaults to "no"; plain
[Enter]/[Return]does not delete. git pushis used with--force-with-leaseso if the server and you have a different understanding of that branch, it is not deleted.- There is no use of
os.systemor shell code to go wrong. - With
--dry-runyou can get a feel for the changes thatgit-delete-merged-brancheswould be making to your branches. - Show any Git commands run using
--verbose.
When the repository is a fork (with an upstream remote and a fork remote):
- Make sure that release branches are tracking the right remote, e.g.
mastershould probably track original upstream'smasterrather thanmasterof your fork. - Consider keeping your fork's remote
masterup to date (usinggit push).
When using GitHub:
- You can make GitHub delete branches of merged pull requests for you, to save
git-delete-merged-branchessome work on the remote side, if you like.
Utility collection git-extras provides a simple shell script named git-delete-merged-branches that competes for command git-delete-merged-branches when both software packages are installed.
To address this conflict you can:
- a) Invoke
python3 -m git_delete_merged_branchesinstead ofgit-delete-merged-branches - b) Invoke command
git-dmbinstead ofgit-delete-merged-branches - c) Control path resolution order through environment variable
$PATH - d) Invoke
git-delete-merged-brancheswith its absolute path. You can runwhich -a git-delete-merged-branchesto see where it's located.
Please report any bugs that you find.
Like this tool? Support it with a star!