If you want to delete your local branches that have already been merged to master remotely, run this in a bash shell:

$ git branch -D `git branch --merged | grep -v '*' | xargs`

This deletes all branches that are merged, except the currently checked out branch (that’s the part with the start). So you should better run this while you’ve got the master branch checked out.

Update 2018-08-25: Powershell equivalent:

PS> git branch --merged | ? { $_ -notmatch '\*' } | ForEach-Object { git branch -d $_.Trim() }

A different way for bash:

$ git branch --merged | grep -v '*' | xargs git branch -d

Note that if you squash & merge (a popular option in GitHub and Bitbucket), then git branch --merged will not return these branches. In that case, try git branch -l but with the extra risk you might delete a branch you were still working on.