0

Normally, when reintegrating an SVN branch into trunk, we create a history like this:

trunk   A---B---D---F---H
             \       \ /
branch        C---E---G---X

where G is a merge, H is the reintegration merge, and X delete the feature branch. I also get that there is a difference in the merge algorithm that SVN uses for G and H. So far, so good.

However, one thing is bugging me: This answer cites SVN documentation on what happens with a reintegration merge as: "And in fact, it does this by comparing the latest trunk tree with the latest branch tree: the resulting difference is exactly your branch changes!"

Since trunc + changes from branch = trunc + (branch - trunk) = branch, I conclude that the recorded state after a reintegration merge is always exactly the same as the recorded state at the end of the branch.

Now consider this history:

trunk   A---B---D---F---H---I
             \        \   /
branch        C---E-----G-----X

With the reasoning above, I'd assume that the changes from commit H are simply lost if I is a reintegration merge. Is this correct, or is there something I've missed?

Community
  • 1
  • 1
cmaster - reinstate monica
  • 38,891
  • 9
  • 62
  • 106

1 Answers1

1

Subversion know that last sync revision is F, so it calculate difference between trunk@F and branch@G and then apply it to working copy.

If destination working copy checked out revision F, then reintegrate will go smooth(without conflicts) and after that you update wc to H (possible conflicts) and be able to commit.

If destination working copy checked out revision H, then reintegrate merge will be performed on top of H (in this case possible conflicts during merge)

In any case nothing will be lost.

Sergey Azarkevich
  • 2,641
  • 2
  • 22
  • 38