Merging is transferring changes from merge source to merge target, just like any transaction, it’s based on the debit-credit system. Now let’s say that we built up some changes in the source branch, these will show up as merge candidates because these changes weren’t merged over yet; the balance is not zero. With this bookkeeping system, TFS records merge history so that every time you merge a change it’s recorded and it doesn’t show up again in the candidates list. If the balance is zero, this means that there are no changes to merge. This usually happens when both branches are at the same version, and one way to accomplish that is to merge all changes up to the latest version, which is the default for the merge command. However, this is not always the case. Most of the time you would like to branch from a good version; one that was bug free or a milestone, and that’s why the merge command has the /version argument, to specify which version you’d like to merge up to. You may also specify a range of versions, which may help speed things up if you know your base version as you can specify a range from the base version to that good version.