2
votes

One of my projects in TFS keeps displaying changesets as unmerged between the branches after I have already merged and committed them. I used the Track Changeset feature and clicked the Visualize button to see if the change was merged. It shows that it was merged but has a different background color and an asterisk. I checked the help and it gives this explanation:

If a branch has received some (but not all) of the changes in a changeset, the branch is filled with a pattern, and an asterisk follows the changeset numbers within that branch. For example, the previous illustration shows that only some of the changes in changeset 38 were merged to the Test branch Track Changes Help

I don't understand how it is that I only partially merged those changesets. Perhaps I did not have latest when I completed the merge but it is happening to a lot of the changesets and this only happens on this one branched project folder.

Is there a way to find out what did not get merged and merge it so that the changesets will quit showing up as a merge candidate?

1

1 Answers

2
votes

A partial merge is recorded when only some changes from a changeset are merged into the target. There are two common scenarios in below which you can end up with partial merges:

Scenario 1:Undo some pending changes when you are checking the merged files

In this case, even though we already merged changeset Dev to Main, it is still a merge candidate. This is caused by the fact that the merge engine detected that there are still some changes in that changeset which were not propagated from Dev to Main.

Scenario 2: Performed the merge at feature level not from the top of the branch

For example: consider that you have two branches Main and Dev, each of them has two folders (Feature1 and Feature2) and each feature folder contains one file. We edit both files from the feature folders (Dev\Feature1\feature1.txt and Dev\Feature2\feature2.txt) and check-in the changes.

If you perform the merge operation at the Feature1 level.(Changset142→ Changeset143) You will notice in the Pending Changes window that only the edit done in the Feature1 folder will be merged. Complete the merge.

If you take a look at the merge history of the Feature1 folder you will see that all changes from changeset 142 have been merged into changeset 143.

However,if you take a look at the merge history of Main you will see that only parts of changeset 142 have been merged into changeset 143. This is normal as changeset 142 has some changes – the edit of the file in the Feature2 folder – which were not delivered.


In case of a partial merge, to figure out what changes have been merged and what changes from the changeset were left out. The only way to achieve this is to diff the contents of the changeset that was partially merged, and the contents of the changeset that was generated as the result of the merge. More detail info you can refer this blog: Partial Merges in TFS – A Guide


Update

You can do a discard merge. This has to be done from the command line. Open up the Developer command prompt, then navigate to a folder under either of your branches (i.e. navigate to one of the affected workspaces). Then type:

tf merge /r /discard "$/Project/B1" "$/Project/B2" /v:C12345~C12345

This will take the changeset identified (in this case it was changeset #12345), and update it as merged to the target branch (branch B2). The target files will be checked out, but they will not be changed - you can simply check them in to complete the operation. After that the changeset will no longer appear as a merge candidate. You can specify a range of changesets to merge at the same time, but they should be contiguous.

Note that after doing this a changeset will occasionally still show up as a merge candidate - this is rather uncommon with the latest versions of TFS, and it is virtually impossible to fix (unless you are running your own local install of TFS and want to get your hands very dirty in the database). If you end up with one of these marooned changesets, just ignore it.

Source: Finding merge candidates in TFS