Very good question. I had the same interest in how best to use git. So far, the best working solution that we use is to fix errors in the "patch" branches from the oldest supported version, and then merge them into later and finally "leading" branches. For new functions, create them on separate branches, combining the "master" in the function branches to update them, and when the time has come to release this function, merge the "feature" branch into "master".
source share