Ya know, for all the conceptual elegance of the idea of branching/merging in software revision control, it sure can be a pain in practice. Just in the last while, I’ve run across the following situations:
- someone mismerged my code because they merged based on files rather than revisions
- had to decide whether to merge someone else’s code because mine was dependent on it, but they hadn’t merged theirs
- had to decide when to merge my code, which was part of a larger feature and was not a complete feature in itself: do it now and possibly introduce instability, do it later and possibly have it get delayed in the shuffle
- stuff I’d merged disappeared because the branch was remade after I merged
- conflict while merging my code because the branch was based on a way older revision than I was informed (so other changes I’d made previously were not there to merge against)
- not knowing whether my changes were to be merged because it wasn’t decided when the feature was to be released
- a special case of the previous situation, when it was first decided the feature was for later, then it was moved earlier
- work for a future feature ended up causing a conflict when trying to merge a current feature because the two changes were made in the other order on the same code