Hi Dan,
The advice you've been given is pretty much spot-on. There's not much to expand on, other than there's two distinct cases going on (from what I can tell):
* Uploading a single (or set) of changes
* Synchronizing changes from one repository to another
In Gerrit, you always want to upload individual (or small sets) of changes to the refs/for/<branch> pseudo-ref. As you found out, this is what creates your review -- sometimes quite effectively. However, when you have a body of changes that have already existed and been reviewed, that's when you push to the refs/heads/<branch> ref -- in other words, you push directly to the branch, bypassing the review.
There's an added point I think Luca was mentioning: if you accidentally create hundreds of reviews, the only way to bulk-close them is to do a second push (of the same content) to "refs/heads/master" -- the result when you push directly to a branch after reviews exist is the open changes are automatically closed. As he stated, at this point, if you wanted to undo the push entirely, a force push would allow you to "rewind" the branch to an earlier point in time, perhaps before any of those commits existed. They would still be visible in the Gerrit change list as "merged" (if you closed the changes by pushing to refs/heads/master) -- but they would no longer be visible in the tree.
I've not worked with GerritHub much, but most likely, something was causing the synchronization to not happen (however that's supposed to work), and so the changes were in your repository, but not in Gerrit.
Hopefully this at least gives a bit more explanation on the "how to deal with it" aspect. :) Also, you're not alone. I've seen someone open several hundred reviews (even as much as a thousand) on a single project more than once -- and had to deal with the hundreds of emails generated as a result.