In our project we try to stay close to the "official" git workflow as it is suggested here:
<http://www.kernel.org/pub/software/scm/git/docs/gitworkflows.html>

We use a `master` and `next` branch, start our topic branches off from `master`, regularly do test integration into `next`, and if a branch is complete, we merge it into `master`.

Now sometimes it happens, that there's some development on `topic-X`. A developer creates `somefile.c` and adds code there that he needs for his topic. After a while another developer works on `topic-Y` and finds out, that he also needs to create `somefile.c` and even would need some parts of that file from `topic-X` - but not the complete file, as it also contains code, which is only related to `topic-X`. He may also have to add other code to that file.

If `topic-X` would be complete and merged into `master`, it would be easy: We could rebase `topic-Y` to `master` to make that code available. But what, if both topics are still incomplete?

Because `topic-X` and `topic-Y` are really unrelated, except for this minor shared code in `somefile.c`, how can we avoid to merge them into each other and still provide both developers with the shared parts from `somefile.c`?

If we create a fresh copy of `somefile.c` in `topic-Y` with only the relevant parts, we found that we get merge conflicts later, when we do test integration in `next`. Is there any alternative?