Rollback command (Team Foundation Version Control)
TFS 2017 | TFS 2015 | TFS 2013
Visual Studio 2019 | Visual Studio 2017 | Visual Studio 2015 | Visual Studio 2013
You can use this command to roll back the effects of one or more changesets to one or more version-controlled items. This command does not remove the changesets from an item's version history. Instead, this command creates in your workspace a set of pending changes that negate the effects of the changesets that you specify.
Prerequisites
To use this command, you must have the Read, Check Out, and Check In permissions set to Allow. For more information, see Default TFVC permissions.
Syntax
tf rollback /toversion:VersionSpec ItemSpec [/recursive] [/lock:none|checkin|checkout] [/version:versionspec] [/keepmergehistory] [/login:username,[password]] [/noprompt]
tf rollback /changeset:ChangesetFrom~ChangesetTo [ItemSpec] [/recursive] [/lock:none|checkin|checkout] [/version:VersionSpec]
[/keepmergehistory] [/noprompt] [/login:username,[password]]
Parameters
Argument
Argument
Description
ChangesetFrom~ChangesetTo
Use this argument with the /changeset option to specify the changesets that you want to roll back. You can specify the changesets in the following ways:
- A single changeset
Example: /changeset:C11
- A range of changesets
Example: /changeset:C7~C20
- A date
Example: /changeset:D09/30/09
- A range of dates
Example:/changeset:D09/23/09~D10/07/09
- The most recent changeset
Example: /changeset:Tip or /changeset:T
ItemSpec
Use this argument to specify one or more items that you want to roll back. If you are using the /toversion option, you must specify this argument.
For more information about how Team Foundation parses item specifications, see Use Team Foundation version control commands.
Note
You can specify more than one Itemspec argument.
VersionSpec
The user-provided value for both the /version option and the /toversion option.
Use this argument with the /toversion option to revert a file to its state in a specific changeset. You can specify the version in the following ways:
- A single changeset
Example: /toversion:C32
- A date (at midnight)
Example: /toversion:D06/19/09
- A date and a time
Example: /toversion:D06/19/09T14:32
- A label
Example: /toversion:LTestLabel
- The version in the workspace that is mapped to the current directory
Example: /toversion:W
- The version in a specific workspace
Example: /toversion:WResolveRIConflicts;AKerry
For more information about how Team Foundation parses versionspecs, see Use Team Foundation version control commands.
Option
Option
Description
/changeset
Use this option to specify one or more specific changesets that you want to negate.
/keepmergehistory
This option has an effect only if one or more of the changesets that you are rolling back include a branch or merge change. Specify this option if you want future merges between the same source and the same target to exclude the changes that you are rolling back.
/lock
Specify this option to prevent other users from checking in or checking out items until you finish rolling back all associated changes. For more information, see Understanding Lock Types.
Lock Options
- None
Default. No lock is applied. If the file that you are rolling back has been locked, this option removes the lock.
- Checkin
Locks an item until you release the lock by performing a check-in. Other users can check out the specified items, but the users cannot check in revisions until the lock is removed. You cannot lock a file that is already locked.
- Checkout
Prevents users from checking in or out a locked item until you remove the lock by performing a check-in.
/login
For information about this option, see Use Team Foundation version control commands, Use options to modify how a command functions.
/noprompt
Suppresses any dialog boxes that would otherwise appear during this operation.
/recursive
Specify this option if you want the operation to include items in subfolders.
/toversion
Specify this option to revert a file to its state in a specific changeset. When you use this option, you negate the effect of all changesets that have been applied since the version that you specify.
/version
Specifies the current version of the files and folders that you want to roll back.
Remarks
The tf rollback command negates the effect of each changeset that you specify for each item that you specify. The following table lists how the operation negates each kind of change.
If you roll back this change... | ...a rollback change and the following additional change are made |
---|---|
add, branch, or undelete | delete |
edit | edit |
encoding | encoding |
rename/move | rename/move |
delete | undelete |
merge | Change that negates whatever changes were merged into the current branch. |
The following list provides some examples of changes that result from the rollback command:
If you are rolling back a changeset in which an add change occurred, the rollback operation causes a rollback change and a delete change.
If you are rolling back changeset 521 in which an edit change occurred, the rollback operation causes a rollback change and an edit change that negates the changes encompassed by the edit change in changeset 521.
In changeset 132, you merged from $/BranchA/File1.txt to $/BranchB/File1.txt. The changes included in that merge included edit changes in changesets 92 and 104. In changeset 162, you roll back changeset 132, which results in a rollback change and an edit change to $/BranchB/File1.txt that negates the edit changes in changesets 92 and 104.
Exit Codes
The exit codes in the following table appear after you run the tf rollback command.
Exit Code | Description |
---|---|
0 | The operation rolled back all items successfully. |
1 | The operation rolled back at least one item successfully but could not roll back one or more items. |
100 | The operation could not roll back any items. |
Examples
The following example negates the effect of changeset 23 on all items that were changed in that changeset.
c:\workspace> tf rollback /changeset:C23
The following example negates the effect of changeset 23 on the file a.txt.
c:\workspace> tf rollback /changeset:C23 a.txt
The following example changes the content of a.txt to match the version that was checked in with changeset 23.
c:\workspace> tf rollback /toversion:C23 a.txt
The following example changes the content of OurTeamProject to match the last changeset that was applied on or before midnight on August 31, 2009.
c:\workspace> tf rollback /toversion:D08/31/2009 /recursive $/OurTeamProject/
Example: /keepmergehistory Option
When you roll back a changeset that includes a branch or a merge change, you usually want future merges between the same source and the same target to include those changes. However, you can use the /keepmergehistory option if you want future merges between the same source and the same target to exclude changesets that were encompassed in a past merge operation.
For example, you can use this command in the following situation:
In On June 30, 2009, you perform a full merge of all items from $/BranchA/ to $/BranchB/:
c:\workspace> tf merge $/BranchA $/BranchB
You check in this merge as part of changeset 292.
In July, you make several changes $/BranchA/Util.cs. These changes are encompassed in changesets 297, 301, and 305.
On August 1, 2009, you merge $/BranchA/Util.cs to $/BranchB/Util.cs:
c:\workspace> tf merge $/BranchA/Util.cs $/BranchB/Util.cs
You check in the change as part of changeset 314. The result of this operation is that the edits that you made in changesets 297, 301, and 305 to $/BranchA/Util.cs are now also applied to $/BranchB/Util.cs.
A week later, you realize that the edits that you made to $/BranchA/Util.cs in July are not appropriate for $/BranchB/Util.cs. You can use the rollback command to negate these changes. When you use the rollback command to roll back a merge change or a branch change, you have a decision to make.
If you want the changes that you made in July to $/BranchA/Util.cs to be re-applied to $/BranchB/Util.cs in future merges, you should type the following command:
c:\workspace> tf rollback /changeset:314
If you want the changes that you made in July to $/BranchA/Util.cs to never be re-applied to $/BranchB/Util.cs in future merges, you should type the following command:
c:\workspace> tf rollback /changeset:314 /keepmergehistory
A few weeks later, you merge $/BranchA/ into $/BranchB/:
c:\workspace> tf merge $/BranchA $/BranchB
If you omitted the /keepmergehistory option, the merge change will apply to $/BranchB/Util.cs all changesets that were applied to $/BranchA/Util.cs since changeset 292, including changesets 297, 301, 305. In other words, a future merge will undo the rollback change.
If you included the /keepmergehistory option, the merge operation will apply to $/BranchB/Util.cs all changesets that were applied to $/BranchA/Util.cs since changeset 292, excluding changesets 297, 301, and 305. In other words, a future merge will not undo the rollback change. Therefore, the content on BranchA might not match the content on BranchB.