If I you do exactly what you describe above, Gerrit should reject the last 2 pushes, because the patch set 1 commit is an ancestor of what you are trying to make patch set 2. That would make a change depend upon itself, making it unsubmittable.
The right way to handle this is, once you decide to fix a bug in A:
git rebase -i HEAD~2
... change "pick" to "edit" for first commit (A) ...
... fix bug ....
... stage files ...
git commit --amend
git rebase --continue
git push origin HEAD~1:refs/changes/A HEAD:refs/changes/B
To fix a bug in B, its easier, because its the most recent commit:
... fix bug ...
... stage files ...
git commit --amend
git push origin HEAD:refs/changes/B
In the next release (.15) I'm hoping to simplify the push command line by automating replacement detection, rather than requiring it to be explicit. I started working on the code yesterday, but got distracted by trying to fix a deadlock we're seeing in replication between two Gerrit instances over a WAN link.