Skip to main content

Rollback a Ooops in TFS with TFPT Rollback

Rhut roe, Raggie. You just checked in a merge operation affecting 100's of files in TFS against the wrong branch. Ooops. Well, you can simply roll it back, right? Select the folder in Source Control Explorer and...hey, where's the Rollback?
Rollback isn't supported in TFS natively. However, it is supported within the Power Tools leveraging the command-line TFPT.exe utility. It's fairly straightforward to revert back to a previous version--with one caveot.
First, download and install the Team Foundation Power Tools 2008 on your workstation. Before proceeding, let's create a workspace dedicated to the rollback. To "true up" the workspace, the rollback operation will peform a Get Latest for every file in your current workspace. This can consume hours (and many GB) with a broad workspace mapping. To work around this, I create a temporary workspace targeted at just the area of source I need to roll back. So let's drill down on our scenario...
I'm working on Program.cs and I accidentally check in a change I shouldn't have. Oops.

Let's create a workspace mapped just to the folder housing Program.cs so we avoid a massive, entire workspace "Get" during the rollback operation.

Afterwards, select that workspace and perform a Get Latest (just to establish the file system directory). Open up a Visual Studio 2008 command prompt and browse to the workspace on the file system.
To perform a rollback, you can target a changeset or a filespec. I prefer the specificity of the changeset but whatever works for you. You also have flexibility with merge and recursive behavior. Here's the full write-up on MSDN for Rollback. Alternatively, just type in a

TFPT rollback /?

Executing the TFPT rollback command (with the /changeset option in this example), will earn you a prompt to get the latest. Go ahead and click Yes.

Important to note here with the changeset option: you want to identify the changeset one prior to the version you wish to rollback to. So, if I want to rollback to changetset 227, I want to use changeset 228 in the TFPT operation.

Next, you'll be presented with all the assets (files) in that folder involved in that particular changeset (228 in this case). We only want to roll back Program.cs so we'll only select that file. If you Ctrl-A and uncheck one box, it will uncheck them all. Click Rollback.

Next, you'll receive feedback at the command line about the operation. But wait, you're not finished! Rollback is a local operation. You still need to check in your change. This is a great "safety" if you messed up the rollback itself. Just Undo Pending Changes.
Ok, so we're ready to check in our changes.

Looking at View History once more, note we actually have a third version and changeset now: 229. But, we've indeed returned to the original (the first, changeset 227) version of the source.

Being back to square one never felt so good...


Rob Streno said…
Hmmm. Wouldn't it be great if someone created a nice PowerShell script to do this?
Ricardo Wilkins said…
Re: your comment about choosing "the one prior to the version you want to rollback to..." - would you agree that rollback is not just important for moving the codebase back to a previous state, but is also important when an 'undo' of a feature or change to the code is necessary? Thus, that could mean a rollback of a small changeset that was checked in 3 weeks ago, for example. Of course, testing now becomes more important. Would you agree, or is this bad practice?
Jeff Hunsaker said…
@Ricardo Maybe I'm old school but if I were removing functionality, I would want to create a new work item and merge that removal into the history. Probably more CYA than anything but it's a data point which would be shoved under the rug if we did a rollback. I'd want to be able to log/audit this feature removal b/c "Well, Ms. Sponsor, we're 2 weeks late b/c we were asked to add and remove this feature 4 times. See here on this report...? It shows Mr. Product Owner approving this work item and re-opening it 4 times." Also, what about functionality added in those past three weeks?
Ricardo Wilkins said…
the first CYA moment happens automatically - the rollback itself is a check-in/changeset; it's now part of version history. CYA #2: add a comment to the rollback check-in. CYA #3: associate the check-in with the work item you created the moment they asked you to remove the feature. Regarding functionality added since that rollback moment... that's the part where you have to cross your fingers. :) But my experience w/ this feature-rollback scenario so far has been [suprisingly] successful.
Jeff Hunsaker said…
@Ricardo Ok, uncle! Good points. I'd still be careful about wacking modifications made between the original and the rollback. Developers are sneaky. :)
Anonymous said…
Interesting. Of course TFPT just wraps TF and TF is just a command line for doing what you can do in the VS GUI. And, underneath the covers, they're doing the same thing we do now:

Check out; get a specific version of the branch that you want to roll back, undoing local changes when prompted. This checks it all in to the version to which you rolled back.

I thought the instructions he had were longer and more confusing than just doing it the original way.
Michael said…
what if I have the following changesets:
was not my project (4)

and I realize that I need to roll back to 2.

Do I issue tfpt rollback /changeset:3 or do issue individual commands (one for each of my changeset numbers (6, 5, 3)?
Jeff Hunsaker said…
@Michael You simply want to issue the rollback ... :3. It doesn't matter who committed the previous versions. Note however, the changes committed by others in v4 will be removed as well.
Nadine & Nico said…
I assume the merge candidates already processed before the rollback will be lost after the rollback. Or will I see them again?
Jeff Hunsaker said…
@Nadine I would assume so but before attempting the rollback, I would clear out your workspace of any merges, edits, check-outs, etc.

Popular posts from this blog

TFS Error | The type initializer for 'Microsoft.TeamFoundation.Build.Server.BuildInformationNodeBinder' threw an exception.

Posting this one for the search engines. If you ever receive the exception "The type initializer for 'Microsoft.TeamFoundation.Build.Server.BuildInformationNodeBinder' threw an exception.", more than likely, your drive space is at 0 on your TFS application tier box.

I encountered this at a client recently. The root cause was that IIS logs had filled up the OS drive (C:\). I switched IIS logging to the applications drive (D:\) which cleaned up the OS drive and resolved the issue.

Detailed message:

TF53010: The following error has occurred in a Team Foundation component or extension:

Date (UTC): 6/7/2011 4:18:53 PM


Application Domain: /LM/W3SVC/8080/ROOT/tfs-1-129519118182628600

Assembly: Microsoft.TeamFoundation.Framework.Server, Version=, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a; v2.0.50727

Service Host: 7ecfbd77-b386-4d75-b038-b05474782696 (DefaultCollection)

Process Details:

Process Name: w3wp

Process Id: 3676

Thread Id: 5752


Windows 10 Creator's Update and Office Conflicts

Recently, Microsoft pushed the "Creators Update" out to Windows 10. It was available in April but it seems to have been force-pushed in the past 2 days. On my mother-in-law's computer, Creator's caused Excel to render a "Bad Image" message when attempting to start declaring "MSVCP140.dll is either not designed to run on Windows or it contains an error". I attempted the SFC and DISM repairs as advised on Tom's site to no avail. When I attempted an Office repair, Office disappeared completely. At this point, I definitely started to panic.

Fortunately, I noticed a pending reboot due to an install/update. Allowing Windows to install that update and rebooting twice brought Excel and Office back to life. I did have to re-register the software but all is well now. If you encounter this issue, stop what you're doing and install/restart Windows. Anecdotally, I've since hear of many folks encountering similar issues.

Verified by Visa: Everything We Tell Folks to Avoid

Phishing is defined by F-Secure as: "Fraudulent e-mail or website claiming to be legitimate seeking indentifiable information. Phishing is an attempt to steal your personal data."When I recently attempted an online purchase from WalMart using my VISA card, being a security wanta-be, I immediately thought phishing when redirected to and saw this dialog:

Seriously, these folks have to be kidding. You're asking for my personal data during a transaction and claim that's its a service " no additional cost." Wow! Thanks...but absolutely not, you jokers. As a malicious thief, I can go a long way with this data.

This is exactly the type of experience which aids malfeasance and the folks trying to steal personal data / identities. How long have we been working to educate folks to avoid providing this type of data under these type of circumstances? Years. And we're just now starting to turn the corner.

VISA, get rid of this! When folks submi…