Did you consider using forks more actively? E.g. each team has it's own fork where they commit, and one person is responsible for merging the fork upstream?
I second this. We really enjoyed the one fork per user model. Each fork's owner was responsible for their own branches, which was much more manageable.
That's really the way Git was designed to be used. Trying to use Git in an SVN model is doable, but suboptimal and likely to lead to the types of issues the parent comment was complaining about.