Credit @masonk https://stackoverflow.com/a/3392942/ :
Delete after merge is the usual way. This is why git branch -d checks
to make sure that the branch is fully merged before it will delete.
There are a few reasons that I can think of to keep a branch around:
you might want to hold onto it in case you have bugs coming back once
it hits production, or you might want a historical record.
In either case, you have the option of tagging the head of the branch
before you delete it. A tag is like a branch in that it is a pointer
to a commit, except for a few minor differences:
porcelain usually doesn't display tags in exploratory commands like
git show-branch or tab-auto complete in checkout
checking one out doesn't set HEAD (you will be in a detached HEAD)
you can leave a "tag" note on top of the note on the commit that it
points at.
This way you preserve history, and if you ever do need to bug fix, I
recommend just creating a new branch off of master for the fix.