Let's assume that some developer in my team shelved his changes that he did in branch A. And I am working on branch B. Can I unshelve his changes into branch B? (By GUI or command prompt)
Choose Unshelve Changes if you want to retrieve the changes in the shelveset into your workspace: For any file changes that you don't want to unshelve, open the context menu of the file, and then choose Exclude. If you want to delete the shelveset, clear the Preserve shelveset on server check box.
It allows you to merge(unshelve) a shelveset into a specific branch. Using Source Control Explorer in Visual Studio, get the history for any folder or file. Select one or more changesets in the list and right-click your selection. The context menu will now have a 'Merge...' option.
The Visual Studio Power Tools should let you do this.
C:\src\2\Merlin\Main>tfpt unshelve /? tfpt unshelve - Unshelve into workspace with pending changes Allows a shelveset to be unshelved into a workspace with pending changes. Merges content between local and shelved changes. Allows migration of shelved changes from one branch into another by rewriting server paths. Usage: tfpt unshelve [shelvesetname[;username]] [/nobackup] [/migrate /source:serverpath /target:serverpath] shelvesetname The name of the shelveset to unshelve /nobackup Skip the creation of a backup shelveset /migrate Rewrite the server paths of the shelved items (for example to unshelve into another branch) /source:serverpath Source location for path rewrite (supply with /migrate) /target:serverpath Target location for path rewrite (supply with /migrate) /nobackup Skip the creation of a backup shelveset
For example to merge a shelve set called "Shelve Set Name" created on Branch1 to Branch2 use this:
>tfpt unshelve "Shelve Set Name";domain\userName /migrate /source:"$/Project/Branch1/" /target:"$/Project/Branch2/"
Alternative solution to tfpt that avoids having to merge each file manually
The problem with the tfs power tool is that you're doing a 'baseless merge' so have to confirm every file. I had a shelveset of over 800 files and I never trust the 'auto merge' button and didn't want to go through each file in turn - so I had to find another way!
C:\temp\shelveset-name
(Note: There's no progress bar when exporting - so if you have a large shelveset that takes a long time to export you'll just have to check in Windows Explorer (File>Properties>Size) that the files are still coming down if you think it's frozen).
You now just have to copy them over to the new branch with Windows Explorer.
This worked for me :
c:\temp\shelveset-name
will have to be renamed to correspond to the new branch. Tip: Make sure you copy to the right place!!! Important: I've found that if you don't first take TFS offline then you'll end up with any new files (from your unshelves changeset) showing without a little red check mark and you'll have to exclude and include them again to get them to add. If anyone has an alternative solution to this problem I'd love to know - refreshing doesn't seem to work.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With