Subversion: How to merge only specific revisions into trunk when multiple consecutive changes are made in a branch?

merge, svn, three-way-merge, version-control

Solution

The problem is that both svn

A
<<<<<<< .working
=======
B (unwanted change)
C (important bug fix)
>>>>>>> .merge-right.r341

and TortoiseSVN is treating the situation as 2-way merge. I've heard of the term 3-way merge, so I gave Beyond Compare a shot. With quick set up with TortoiseSVN, Edit Conflict now bring up the following screen. This is not perfect, since it's still requiring human intervention, but at least I can tell which changes are coming from where.

See screenshot.

Problem

I have been using TortoiseSVN, svn, and subclipse and I think I understand the basics, but there's one thing that's been bugging me for a while: Merging introduces unwanted code. Here's the steps. `trunk/test.txt@r2`. A test file was created with 'A' and a return: ``` A [EOF] ``` `branches/TRY-XX-Foo/test.txt@r3`. Branched out the `trunk` to `TRY-XX-Foo`: ``` A [EOF] ``` `branches/TRY-XX-Foo/test.txt@r4`. Made an unwanted change in `TRY-XX-Foo` and committed it: ``` A B (unwanted change) [EOF] ``` `branches/TRY-XX-Foo/test.txt@r5`. Made an important bug fix in `TRY-XX-Foo` and committed it: ``` A B (unwanted change) C (important bug fix) [EOF] ``` Now, I would like to merge only the important bug fix back to trunk. So, I run merge for revision `4:5`. What I end up in my working directory is a conflict. `trunk/test.txt`: ``` A <<<<<<< .working ======= B (unwanted change) C (important bug fix) >>>>>>> .merge-right.r5 [EOF] ``` Against my will, Subversion has now included "unwanted change" into the trunk code, and I need to weed them out manually. Is there a way to merge only specified revisions when multiple consecutive changes are made in the branch? The part of the problem is that B (unwated change) is included in .merge-right and I can't tell the difference between which revision it came from. I usually use TortoiseMerge and here's how it looks.

Original source