concept baseless merge in category system administration

This is an excerpt from Manning's book Team Foundation Server 2008 in Action.
Merging is used to integrate code between branches. TVFC enables you to easily merge code that’s located in related branches (branches that are related via parent-child relationships). Although less straightforward, TFVC allows you to merge code between unrelated branches using a baseless merge. Typically, all changesets up to a particular point are included in a merge. However, TFVC also supports cherry pick merges, where you can specify certain changesets to be included in the merge. You can also view merge candidates, review merge histories, detect and resolve merge conflicts, and roll back merges.
Understanding common merge operations— Learn about common merge operations such as viewing merge histories, viewing changes in merged files, determining merge candidates and potential conflicts, resolving merge conflicts, rolling back merges, and performing baseless merges.
If you ever need to merge changes between two branches that don’t have a direct parent-child relationship, you need to understand the concept of baseless merges. A baseless merge is needed when TFVC can’t find a base—a common ancestral point of consistency—between two branches. Baseless merges can’t be performed from the Source Control Explorer. From the Source Control Explorer, you can only merge between branches that have direct parent-child relationships. Once you execute a baseless merge, TFVC establishes a merge history between the branches; subsequent merges between those branches can be normal merges. But the Source Control Explorer still doesn’t let you merge between branches that have a merge history established by a baseless merge. You need to use the tf merge command to merge these branches normally (after you’ve created a merge history via a baseless merge).
To run a baseless merge, type the following at the command prompt:
The tf merge /baseless command displays the Resolve Conflicts dialog box, showing a version conflict for every file involved (see figure 6.14). Namespace operations such as add, delete, and rename aren’t pended during a baseless merge, since TFVC can’t do a direct comparison between the source and target files. Due to a bug in the Resolve Conflicts screen, the auto merge feature doesn’t work as expected. If you click Auto Merge All in the Resolve Conflicts dialog box, the screen still displays the files that can be merged automatically. This is a major problem in large projects, since you’ll be forced to unnecessarily inspect potentially a huge number of files. Fortunately, you can use the following command to automatically merge identical files, after the changes have been pended by the tf merge /baseless command:
This command will only display conflicts that can’t be resolved automatically. Use the merge screen to manually resolve these conflicts (see figure 6.15). By comparing the source or target version with the base version, you’ll realize that the base is actually the first changeset associated with the source branch. Since there’s no branch or merge history between the two branches, in order to find a base version during a baseless merge, TFVC goes back to the root of the source branch and refers to it as the base.
What happens if you try to do a baseless merge between two branches that have a direct parent-child relationship? Does it take the last point of consistency (the last source changeset version that was branched or merged with the target) between the two branches or does it go all the way back to the root of the source branch? As it turns out, TFVC chooses the root of the source branch (the first changeset in the source branch) as the base version if you do a baseless merge between parent-child branches.