"How to" SVN Merge with TortoiseSVN

image Ok, I have the hardest time remembering the "FROM" and "TO" semantics when merging in SVN.  So, here's a quick and dirty summary on merging in TSVN.

Suppose, you have a branch feature that you'd like to merge back into the trunk.

If there have been no changes to the trunk since you've been working on your branch, you can simply follow the steps below to merge your branch to trunk (branch -> trunk).

However, if there have been changes to the trunk while you've been working on your branch, then you should:

  1. First, merge trunk to branch (trunk->branch) to update your branch with the latest trunk changes.
  2. Then merge your new features from branch to trunk (branch->trunk).

Merge branch to trunk (branch->trunk)

  1. Commit all code in your working directory.
  2. Switch your working directory to the trunk:

    image image

  3. Next, Merge...
    image

  4. In the merge window, we need to make sure we are going "FROM" the trunk "TO" our branch.  The reasoning behind this is that we are doing a DIFF between the trunk and the branch.  Or, starting "FROM" the trunk's current state "TO" our branch's state.  The trunk is the starting point for the branch changes.

    image
  5. Now that the diff has been calculated, the results are stored in your working directory. You'll need to commit these results into  the /trunk to finalize the merge. 

    image

 

 

Merge trunk to branch (trunk->branch)

  1. Commit all code in your working directory.
  2. Make sure that your current working directory is your branch.
  3. Next, Merge...

    image
  4. The "FROM" text box should be the URL to the /trunk.  Why isn't it the URL to the branch?  Well, your branch doesn't have the changes that you're looking for in /trunk because we're trying to update our branch with changes in the trunk.  Effectively, what we want to do is perform a DIFF between the last time your branch was synchronized with the trunk and the head version of the trunk with the latest changes.  This is why "FROM" URL is set to /trunk and the revision number is set and the "Use 'FROM' URL" is set with "HEAD" revision.

    In my case below r25 was the last time the base of my branch was synchronized with the trunk.  I want to "REPLAY"/"DIFF" all changes that happened from the time my last branch (r25) was synchronized with the base of the "/trunk" up "TO" the current "HEAD reversion".  The result of this merge should be stored in my current working directory (which points to my /branch/cowboy).

    image
  5. Once the merge happens, you're branch should now be synchronized with the /trunk.  You'll want to "Commit" the result of the diff and add a special note in the message that indicates what revision you're working copy is based on.

Hope that helps!

Brian Chavez

 

PS: Here are some other useful links on merging with SVN:

Comments

# re: "How to" SVN Merge with TortoiseSVN
Gravatar Just wanted to say thanks, this info helped me a lot. I use Subclipse, but the idea is the same. The wording in the dialog is confusing to me, and the difference between t->b and b->t threw me for a loop, but I got it now =)

Thanks for the good post!
Left by Ethan on 10/7/2008 7:04 AM
# re: "How to" SVN Merge with TortoiseSVN
Gravatar Thank you for the excellent explanation.
Left by Kim on 1/28/2009 5:56 AM
# re: "How to" SVN Merge with TortoiseSVN
Gravatar Nice and Simple,Thanks
Left by atechgeek on 4/8/2009 2:02 PM
# SVN Merge was quite easy
Gravatar Thanx. This was easy and clean.

However, in my case, my SVN Repository is hosted on a Web Server. To add to it, I had to merge the branch of a colleague while I was working on the mainline. After quite a few trials, finally, checked-out the branch, merged the branch copy with the mainline (trunk->branch). Then i did an export of the merged branch copy, and copied the exported copy over to my mainline copy. ;) I know this is dirty, but I could keep my sanity with what was happening.

Kudos Chavez. Keep up the good work!

Sridhar
Left by Sridhar on 4/27/2009 3:41 AM
# re: "How to" SVN Merge with TortoiseSVN
Gravatar One thing I don't understand is how you came up with the revision number 25 (last time the base of my branch was synchronized with the trunk)? Did you just remember that or can you get it from subversion somehow?
Left by Chung on 6/16/2009 12:39 PM
# re: "How to" SVN Merge one particular change with TortoiseSVN
Gravatar How to merge a single change from branch to trunk using SVN.
Left by Rohit on 7/1/2009 2:11 AM
# re: "How to" SVN Merge with TortoiseSVN
Gravatar @Chung:

I had the same problem, and then I saw TortoiseSVN added a property to the working copy directory(svn:mergeinfo) with the revision range.
Left by Kevin on 12/23/2009 6:34 AM
# re: "How to" SVN Merge with TortoiseSVN
Gravatar Excellent!!
Left by Robrecht on 3/12/2010 12:43 AM
# re: "How to" SVN Merge with TortoiseSVN
Gravatar Awesome!!! It did help a lot....

Thanks,
--Atul
Left by Atul on 3/15/2010 4:15 PM
# re: "How to" SVN Merge with TortoiseSVN
Gravatar Thanks, very much!! This is perfectly clear. Have bookmarked this page for future use. Wow! Thanks again.
Left by Greg on 4/12/2010 12:03 PM
# re: "How to" SVN Merge with TortoiseSVN
Gravatar Thanks a lot, this finally made me understand how merging is done.
Left by Richard on 4/16/2012 8:29 AM
# re: "How to" SVN Merge with TortoiseSVN
Gravatar Interesting. But what about a brnach where you don't want trunk changes to be merged into? i.e. the branch is for a specific feature set that should always be merged into trunk as the ongoing version. However in this case the branch represents the trunk at the original point in time of branch creation plus the new feature code specific to that branch. What are the risks on only doing a branch->trunk merge in this case? i.e. is it possible the merge would remove some of the new trunk code included as normal trunk development in the shared files?
Left by Jimmy on 10/31/2012 7:22 AM
# re: "How to" SVN Merge with TortoiseSVN
Gravatar Thanks! You saved me a lot of trouble.
I tried the TortoiseSVN docs but they are so vague.
Left by Pete on 12/14/2012 1:45 AM
# re: "How to" SVN Merge with TortoiseSVN
Gravatar Youlet me know more features SVN
thanks you
Left by tenh on 2/22/2013 12:59 AM
# re: "How to" SVN Merge with TortoiseSVN
Gravatar Thanks! Helped instantaneously!
Left by Ankeet on 7/30/2013 10:07 PM
# How yeha
Gravatar Very good one, simple & perfect for a tutorial. I will give that to my dev
Left by Dax on 12/16/2013 1:10 PM
# Re: SVN Merge..!
Gravatar Nice explanation with images. Is this same we can follow for SVN? Not for TortoiseSVN. Or any other procedure to follow?
Left by Muralidhar on 2/10/2014 6:35 AM
# re: "How to" SVN Merge with TortoiseSVN
Gravatar Many thanks. You saved me a lot of research.
Left by Marta on 6/12/2014 6:32 AM

Leave Your Comment

Title*
Name*
Email (never displayed)
 (will show your gravatar)
Url
Comment*

Please add 3 and 4 and type the answer here:

Preview Your Comment.