Cleaning up a remote

Before you proceed, you should prune your remote and make sure you’re in master branch.

git remote prune origin
git checkout master

Merged Branches - These should all be safe to delete

for branch in `git branch -r --merged | grep -v HEAD`; do echo -e `git show --format="%cr|%an" $branch | head -n 1`'|'$branch; done | sort -r | column -s '|' -t | grep -v master

Unmerged Branches - These need to be looked at closely

for branch in `git branch -r --no-merged | grep -v HEAD`; do echo -e $branch'|'`git show --format="%cr|%an|%s" $branch | head -n 1`; done | sort -r | column -s '|' -t

Cleaning up local branches

Merged Branches - These should all be safe to delete

git branch --merged master | grep -v "\* master"

If you want to delete them automatically:

git branch --merged master | grep -v "\* master" | xargs git branch -d