Recently I had the need to check in some changes in a different branch. In git this is very easy, but as far as I know in TFS not so much.

Using the approach detailed by  Torbjörn Bergstedt at Stack Overflow, I created a shelveset on my source branch and subsequently migrated said shelveset onto the target branch

tfpt unshelve client /migrate /source:$/MY-PROJ/SourceCode/dev-branch /target:$/MY-PROJ/SourceCode/UI-branch
to which tfpt helpfully replied
Creating the backup shelveset which will serve as a snapshot of your workspace's current state...
asking me then to deal with the merges. As it was a new branch, selecting auto-merge solved all of the conflicts. At this point, I got
The backup snapshot was preserved as the shelveset myshelve_backup1.
Analyzing this shelveset, however, turned out to be a bit weird. My source shelveset had about 8 changes. The target changeset (and as I asked for an unshelve, also my workspace) has about 360 changes. Why?

I have a folder at the same level of the source and target branch. This is a regular folder, not a branch in itself. For some reason, even though I explicitly requested a migration for the source to target branch, this top level folder was included into the target shelveset as with every item added, which is in itself weird: the files obviously already exist.

That being said, I undid my pending changes in that folder and continued to work on the target branch. So, this works, but I wouldn't recommend its use on a regular basis.

If you know any better way to do this, please, find me on Twitter and let me know.