Isn't what you're doing a perfect fit for rebasing [1]?
That is, you keep your changes as a series of commits on top of your
"upstream" branch and each time you're about to bring upstream changes
in, you rebase your local branch on top on the updated upstream branch.
1. http://git-scm.com/book/en/Git-Branching-Rebasing
Yes it can do the work, but I afraid that it gets messy in a
collaborative work as said at the end of the article. I prefer to
maintain my patches using Quilt so everything is clear.
--
Jimmy