If "Push Merges back to origin" is turned on in a matrix configuration each child will try to push to the origin independently. Aside from the problem that a change will be pushed out if it succeeds on any rather than all configurations, the push for all but the first child to succeed will most likely fail (each child has its own merge commit which will conflict with each other), causing the run to appear to have failed.
This patch solves both problems by causing the push to only occur in the parent build. It is dependent on issue #5002.
This may not be the best solution to the problem. Since each child generates its own merge commit, there may be discrepancies between merges generated on different slaves if they have different versions of git. A better solution may be to have the parent generate a pack containing the merge commit which is passed to all children.