2021-12-16    Share on: Twitter | Facebook | HackerNews | Reddit

Git - Delete Branches That Are Merged Into the Main Branch

When actively developing feature branches that are later merged into develop branch you might end up with a bunch of local branches that are not relevant anymore, and do not have their remote counterparts and it would be good to remove them locally.

First - fetch and prune

git fetch -p

git fetch --prune will connect to the remote and fetch the latest remote state before pruning. It is essentially a combination of commands:

git fetch --all && git remote prune

NOTE: The generic git prune command is entirely different. it will delete locally detached commits.

Read more about it: Git Cleanup: "git Remote Prune" Explained | by Maroun Maroun | Better Programming

How Do I Clean Outdated Branches?

git fetch --prune is the best utility for cleaning outdated branches. It will connect to a shared remote repository remote and fetch all remote branch refs. It will then delete remote refs that are no longer in use on the remote repository.

Does Git Remote Prune Origin Delete the Local Branch?

No git remote prune origin will only delete the refs to remote branches that no longer exist. Git stores both local and remote refs. A repository will have local/origin and remote/origin ref collections. git remote prune origin will only prune the refs in remote/origin. This safely leaves local work in local/origin. To remove local branches you need to use git branch -d or replace -d with -D.

Credits: Prune explanation comes from an excellent article on Git Prune

If you want to have prune executed with every fetch operation, you can configure Git accordingly:

git config --global fetch.prune true

Second - delete merged local branches

git branch --merged origin/develop | grep -v develop | xargs git branch -d

--merged origin/develop - branches merged into remote develop grep -v develop - for safety reasons: exclude develop from the list of branches to delete

Read more here: https://stackoverflow.com/questions/16590160/remove-branches-not-on-remote

]