TFS Branch/Merge meets History View - tfs

We have a setup with a development "trunk" in our recently-migrated-to-from-VSS TFS system and developers have been doing work in branches off the trunk, which are merged back in.
We've been diligently commenting our changesets at check in time, something we never did in the VSS days. However when I right-click on a trunk file in the Source Control Explorer and choose History, I only see monolithic changesets labeled "merge from dev branch" (or whatever the developer scribbled in there when they merged.) A history entry doesn't even seem to contain info on which branch was merged in at that time, let alone any info about the changesets that make it up, or the comments that go with them.
How have other TFS users dealt with this issue?
Is there another way to view the history that I'm missing here?

Looking at the history of a change prior to the merge has been a bit of a pain point with TFS. So much so that Microsoft have done a lot of work to address this in the next version of TFS (TFS 2010). In TFS 2010 (when it comes out), when you get to a merge in the history view it is actually a little twistie that you can expand and go see the history for the thing that was merged which is much nicer.
In the meantime, when I see I big monolithic merge (or branch) comment I tend to let out a audible sigh and then go find the file in the branch it was merged from in Source Control Explorer and do a view history there.

This might be what you are looking for: http://www.codeplex.com/TFSBranchHistory
Haven't used it personally, so I can't vouch for it.

Visit "TFS Branched History" plugin page at Microsoft Gallery:
http://visualstudiogallery.msdn.microsoft.com/7d4f37b6-f9a4-44c6-b0a0-994956538a44
Plugin does insert "Branched History" button into the context menu of Source Control Explorer (TFS)
The button icon is with clock like standard "History" but with blue arrow:
If you click "Branched History", new window will be opened and Path property will be set to the current Source Control Explorer path:
Click "Run query" to get results at the "History" tab:
From context menu you can query standard Changeset Details and Compare File (Folder) dialogs.

Related

View all files changed since branch (TFS)

Using VS2013 and/or VisualStudio.com, is it possible after creating a branch ("Main" branched to "Dev001") to view a list of all the files that differ between "Main" and "Dev001"?
For example, I'd like to see all the files that have been amended/created within the current branch, since it was branched.
The closest I have got is right-clicking the branch, selecting View History, then clicking each changeset to view the files in the Changeset Details panel, however, there are many changesets in there which is taking a long time.
Please note I am not using Git.
Just right click on your Main branch in Source Control Explorer an select Compare.... From there you can specify the path to your branch and the versions you would like to compare.

TFS: Updating branch with changes from main

So, we have our main dev line, I create a branch, and developer b creates a branch. We both do some work. developer b finishes his work, merges back into the main dev line. I know his changes will affect me, and rather than deal with the conflicts later, I would like to update my branch, with the changes that are now in the main dev line, so I can deal with them in my branch, prior to merging back into main.
How do I do that?
From Visual Studio, open Source Control Explorer:
View | Team Explorer
Select your Team Project from Team Explorer, expand it, and double click Source Control
In the left-hand pane of Source Control Explorer, select your Team Project.
In the right-hand pane, find your mainline branch, right-click and select Merge...
In the Target branch drop-down, select your dev branch.
If you want a subset of all the changes in the mainline:
Choose the Selected changesets radio button, click Next.
Select the changesets that represent the merge from your other dev's branch into main, click Next.
Otherwise, keep All changes up to a specific version selected, click Next
The next step has you pick a Version type. The default, Latest Version is obviously straightforward and self-explanatory: you would be brining all changes since your branch was created from the mainline down into your branch. The other choices are straightforward, but a tutorial explanation of each option available here would take a fair amount of space.
Walk through the remaining steps of the wizard.
Click Finish.
If there are any errors or merge conflicts, you will be prompted to resolve them, similar to what you would see if checking your changes into source control when other changes had been made since last checkout.
After the merge is done, all the changes are in your local copy of the branch, but they are not yet committed to source control. Once you've completed all your builds and testing on your branch, you can check in the merge. From Visual Studio:
View | Other WIndows | Pending Changes
Make sure all the files related to this merge are checked, add comments describing the merge, and click Check In.
I recommend keeping merges (and any necessary merge conflict resolution, build breaks, test breaks) as their own changeset. That is, do not mix other feature work with merges. Granular changesets make it much easier to review source control history, and to identify a single change of interest. Keeping merge work in its own changeset helps work toward that goal.
There is command-line for merging as well, run tf merge /? from a Visual Studio Command Prompt.

How to undo pending changes in TFS of users that no longer exist

We have a few developers who don't work here anymore, but didn't check all theirs changes into Team Server before they left.
Now their usernames don't exists anymore, and I can't access their pending changes to undo them....
I found a way, not needing command line.
With Power Tools installed (both in 2008 and in 2010 version), Visual Studio shows a node for Team Members in each project. If you right-click on one of the members, you can choose to view all their pending changes. Till now nothing new. BUT, I suddenly saw, in the right hand upper corner of the pending change list, a link that says "Modify Query".
I opened the window, and in it was an input field that let me change the username. I changed it to the username I wanted, and I got his list of pending changes!
Here's a link to the TFS 2008 Power Tools:
http://www.microsoft.com/downloads/en/details.aspx?FamilyID=FBD14EEA-781F-45A1-8C46-9F6BA2F68BF0
and the TFS 2010 Power Tools:
http://visualstudiogallery.msdn.microsoft.com/en-us/c255a1e4-04ba-4f68-8f4e-cd473d6b971f
Edit by woppers:
I don't have enough Rep to comment so I have to make an edit. I had the same issue as the OP but I am working in TFS 2013 so the procedure is slightly different. Here's what I did.
Go to:
Source Control Explorer
right click on the collection you are working in
Find
Find Changesets...
Enter your LanID in the “By user:” field
Click search
Click find
That will show you all of your pending changes.
Highlight one of them and click “Details...” to view the info in them.
As an administrator of TFS you should have some option of global check in.
something like that in the command line: tf lock /lock:none /workspace:workspace;username $/code/foo.cs /s:http://server:8080
or better yet:
tf undo /workspace:workspace;username $/code/foo.cs /s:http://server:8080
To expand a bit on the awesome answer provided by xr280xr... I needed to undo pending changes of a former employee, and this worked for me on a TFS 2013 server, using VS2015 on my own desktop:
Right click the folder in Source Control Explorer > Find > Find
by Status and enter * as a wild card. You can reduce the results to
a specific user if you know the user name.
When the results appear, you can right-click and select Undo. The
Output window should confirm success.
Note that if the former employees' workspace is on another PC, you'll continue to see the pending changes they have, but they will no longer prevent checkout, build, etc.
I'm guessing that deleting the former employees workspace will get rid of the pending (now-undone) changes, but I haven't tried it yet.

How to browse TFS changesets?

I want to browse TFS changesets.
I do NOT want to search changesets by specifying a file contained within the changeset. I do not want to specify which user I think created the changeset.
I simply want to key in a changeset number and look at that changeset. Or maybe view a range, and then browse those.
No specified file, no specified user. TFS 2008 seems to not want to allow me to do this.
I must be missing something.
How do you do this?
In Source Control Explorer, hit CTRL+G. This will bring up the Find Changesets dialog. Unfortunately it's kind of one-size-fits-all in VS 2008: you have to work inside a big bulky search dialog, even if you already know the number(s). In your case, flip the radio button to search by range and then key in the desired changeset number as both the start & end of the range.
The VS 2010 version of this dialog simplifies the "lookup single changeset by #" use case, FWIW.
My personal preference: if you have a console window open, there's a quicker route. Simply type tf changeset 12345. If using the Power Tools, you can substitute "Get-TfsChangeset" or "tfchangeset" for improved performance and programmability.
in the Source Control Explorer window, right-click on any folder in the source control tree and select View History. this will give you a list of changesets that touch that folder (recursively). It's not a way to key in a changeset, but it's another easy way to see changesets
you can also right click on a folder and select Find in Source Control -> Changeset... which will allow you to enter a changeset number or range.
** these might be part of TFS Power Tools
On the website which is provided by TFS or on Visual Studio Online, go to your team home page. Then on that page click on the link Code then Changesets which after loading provides a list of the historical change-sets.
Steps
1. Open Visual studio and find Team Explorer(right hand side of computer screen).
2. Click on Team Explorer and Look for Source Control Explorer.
3. Now Click on Source Control Explorer.
4. Now Press CTRL+G
5. Changeset popup will come up.
6. Enter Changeset Number.
7. Click OK button of Changeset Popup.
8. Changeset Details will come up.
Thanks... :)

View TFS checkin history through merges?

In TFS when you merge branch A to branch B and checkin, you get a single changeset on B (typically with a comment like "merged A->B").
This means B doesn't have any of the checkin history from A. So if someone created a new file on branch A, you can't tell who created it from branch B. And if someone updated a file on A, you can't tell who did the update from branch B.
Is there any way to see this kind of detailed changeset history across branches? Some kind of power toy, or third party tool, or anything?
Update: The TFS Power Toy tfpt history /followbranches tool does not "expand merges," it only "expands branches" and therefore doesn't solve this problem.
Right now 'tf merges' and 'tf merges /f:detailed' provide the most complete merge tracking information. However, they are command-line only. And the only 3rd party tool I know of that attempts to provide a GUI is TFS Sidekicks.
This gets a lot easier in TFS 2010. See screenshots at:
http://blogs.msdn.com/mitrik/archive/2009/06/08/first-class-branches.aspx
http://msdn.microsoft.com/en-us/library/dd405662(VS.100).aspx
http://msdn.microsoft.com/en-us/library/dd465202(VS.100).aspx
http://blogs.msdn.com/bharry/archive/2008/01/16/new-features-to-understand-branching-merging.aspx (old prototype, has changed somewhat since then)
TFS 2010 will include support for this.
Brian Harry talks about it in this presentation.
You will now be able to see where a change originated and who made it after the change has been merged to a different branch.
TFS SideKicks is another good tool for supplementing TFS default tools.
The TFS 2008 power toys does come with the tf history /followbranches command. But that command doesn't expand merges.
All it does is show you the change set history from A before branch B was created. What it doesn't show you is what change sets were merged from A -> B after the branch was created.
In other words, what I want to see is all the change sets that were made on a source branch and then applied to a target branch as part of merge operation.
I think you would find TFS Sidekicks helpful, especially the history area:
History Sidekick application pane provides the following features:
View version control tree with files and folders (similar to Source Control Explorer)
Search item (file or folder) by name and select found item in version control tree
View selected item history either for all users or filtered by user
Export history list to CSV file
Compare file versions selected in history
View selected item properties and pending changes
View selected item branches tree and selected branch properties
View selected item merge history; it is possible to view separately all merges performed with selected item as a merge target (merges to) or with selected item as a source (merges from)
Compare merge target and source file versions in history
View selected item merge candidates in a tree view; it is possible to select single merge source from the list
Compare merge candidate file version with latest version of target file
View selected item labels either for all users or filtered by user; the information displayed includes item version in label
Compare file versions between two labels
View changeset details supported in all lists containing changesets
Team Foundation Sidekicks
Might want to try the TFS Follow branch History tool:
http://www.codeplex.com/TFSBranchHistory
"TFS Branched History" plugin exists at Microsoft Gallery:
http://visualstudiogallery.msdn.microsoft.com/7d4f37b6-f9a4-44c6-b0a0-994956538a44
Plugin does insert "Branched History" button into the context menu of Source Control Explorer (TFS)
The button icon is with clock like standard "History" but with blue arrow:
If you click "Branched History", new window will be opened and Path property will be set to the current Source Control Explorer path:
Click "Run query" to get results at the "History" tab:
From context menu you can query standard Changeset Details and Compare File (Folder) dialogs.

Resources