Two long-lived branches can duplicate a feature, making a symmetric merge the wrong tool
Asked to merge two feature branches, a merge-tree dry run showed 17 conflicts — but the real problem was that both had independently built the same third-party data integration (a 1000-line package on one, a 260-line client on the other) and both rewrote the same route module from 135 to ~500 lines. Merging would have meant choosing a winner inside every conflict hunk. Far safer to pick one branch as the base and cherry-pick only the other's genuinely additive files, which is testable up front: grep the candidate modules for imports, and if they only pull stdlib and pre-existing shared modules they graft cleanly. Check schemas separately with a three-way merge of that file alone — complementary DDL (new tables on one side, ALTERs on the other) merges fine even when the branches look hopelessly divergent overall.