我想回滚一个提交记录所做的更改。在特定变更列表的右键上下文菜单中,有以下两个选项:
- Rollback…
- Back Out已提交的更改列表
这两个选项有什么区别?在什么情况下应该使用其中之一?
这两个操作都可以将一组文件恢复到之前的状态,实质上比使用 p4 obliterate
命令更快、更安全地撤消错误(且您不需要管理员权限即可使用它们)。
在“Rollback...”的情况下,可以是任意数量的文件,甚至是整个工程库。您可以告诉它要回滚到特定版本、变更列表或标签。文件将被恢复到创建该版本、变更列表或标签时的状态。
在“Back Out Submitted Changelist #####”的情况下,恢复操作仅限于在变更列表#####中提交的文件。这些文件将被恢复到您提交该变更列表之前的状态,前提是自那时以来这些文件没有进行任何更改。如果对任何这些文件进行了后续更改,Perforce 将提示您这些文件现在已过期。您需要同步到头版本,然后解决差异。这样,您就不会无意中覆盖您实际想要保留的任何更改。
这两个操作的实质是将旧版本作为新版本提交。当您执行“Rollback...”时,您正在将文件恢复到特定时间点的状态,无论自那时以来发生了什么。当您执行“Back out...”时,您正在尝试在保留自那时以来发生的更改的同时,撤消您在特定时间点所做的更改。
撤销一个提交的更改
你无法撤消已成功提交的更改列表,但可以通过两种方式撤销先前提交的更改:
回滚 将文件或一组文件恢复到指定的更改列表、日期或版本。 在此时间点之后进行的任何更改都不会被保留。 反向回退 删除在给定的更改列表、日期或版本中进行的特定更改,但允许用户保留在随后的版本中进行的更改。
详细信息请参阅 https://www.perforce.com/perforce/r13.1/manuals/p4v/Working_with_changelists.html
Backout是还原或撤消我们的更改。其实现方式是,P4会在我们的本地工作区上撤销一个变更清单(默认或新)中的更改。然后,我们需要像处理其他变更清单一样提交/提交此被撤销的变更清单。这里的第二部分很重要,因为它不会自动将变更清单撤销到服务器上,我们必须提交被撤销的变更清单(这在做过之后是有意义的,但最初我认为它会自动执行该操作)。
正如其他人所指出的,Rollback具有更强大的功能——可以将更改恢复到特定日期、变更清单或版本号。
回滚...会提示您选择一个文件夹进行回滚,即它将在特定文件夹上工作,您可以回滚到标签、变更列表或日期。而撤销则是在特定变更列表中的文件上操作。