From what I understand, you have one remote foo, containing branch_1 and branch_2. First, we can't do merge operation remotly. We have to track the remote repository, do the operation we want locally (such as merging branches) and then push our new snapshot to the server.
Ie:
git clone [repo_adress]
You are on the master branch.
You can then checkout or create other branches and do your work in it.
Now suppose we have the two branches branch_1 and branch_2. You want to merge branch_1 into branch_2 and then delete branch_1.
You checkout to branch_2 and then merge branch_1 with it:
$ git checkout branch_2
$ git merge branch_1
From there either the merge is smooth or you've got conflict. Once the merge is done, you can delete the merged branch i.e branch_1 by doing:
$ git branch -d branch_1
And then push your work:
$ git push
In case branch_2 doesn't exist on the remote, you've got to create it:
$ git push -u foo branch_2
Note that deleting branch_1 locally doesn't delete it remotely (considering that it exists on the remote). To do so, we are going to say to git: "push nothing to the branch i want to delete" ie:
$ git push remote_name :branch_name
To read like git remote push remote_name "nothing":branch_name.
Now is there any mean to do it automatically?
I don't know (although I would investigate post merge "git hook"), but I'm not sure we ought to wish it. Deleting branches on remote is somewhat hazardous. Doing so manually is a good way to be sure of what we are doing.