Rebasing
Branching
VersionControl
VersionControlBestPractices
3-way merging
Merging between branches
Traditional 3-way merges work the following way:
1. Identify a base version (automatically by leveraging merge history)
2. Compute a patch that if applied to the base will provide the derived file1 (left)
3. Compute a patch that if applied to the base will provide the derived file2 (right)
4. Merge both patches into the base version and create an output which is a merge that has both changes from file1 (left) and file2 (right)
A baseless merge scenario is created when the application is unable to identify a base version and requires the user to define one. Team Foundation relies on merge history to identify a base version but when branches do not have a direct relationship (meaning they are not branched from each other or in other terms are not parent-child) this history does not exist. At this point the application is not able to establish a base version and a baseless merge is the only way to merge changes.