“回滚”和“回滚”有什么区别?和“Back Out Submitted Changelist #####"在Perforce P4V中

我想从我的一个签入中撤销更改。在特定更改列表的右键上下文菜单中,有以下两个选项:

  • 回滚……
  • 退回提交的变更列表

这两者有什么不同?在什么情况下我应该使用这两种方法?

113399 次浏览

回滚……将提示您选择要回滚的文件夹,即,它将在特定的文件夹上工作,您可以回滚到标签或更改列表或日期。退出作用于特定更改列表中的文件。

这两个操作都将一组文件恢复到以前的状态,本质上是比使用p4 obliterate命令更快、更安全的方法来消除错误(并且您不需要管理员权限来使用它们)。

在“Rollback…”的情况下,这可以是任意数量的文件,甚至是整个仓库。您可以告诉它回滚到特定的修订、更改列表或标签。文件将恢复到创建该修订、更改列表或标签时的状态。

在“Back Out Submitted Changelist #####”的情况下,恢复操作仅限于在Changelist #####中提交的文件。这些文件将恢复到您提交更改列表之前的状态,前提是此后没有对这些文件进行任何更改。如果对这些文件中的任何一个进行了后续更改,Perforce将告诉您这些文件现在已经过期。你必须同步到头部修订,然后解决差异。这样,您就不会无意中破坏您实际上想要保留的任何更改。

这两种操作本质上都是通过将旧版本作为新版本提交。当你执行“Rollback…”时,你是将文件恢复到它们在特定时间点的状态,不管之后发生了什么。当你执行“Back out…”时,你是在尝试撤消您在特定时间点所做的更改,同时保持已经发生的更改。

反转变更列表提交

您不能撤消已成功提交的更改列表,但可以通过以下两种方式撤消以前提交的更改:

回滚将一个文件或一组文件恢复到指定的更改列表、日期或修订。在该时间点之后所做的任何更改都不会保留。 Back out删除在给定更改列表、日期或修订时所做的特定更改,但允许用户保留在后续修订中所做的更改。

详情请参考https://www.perforce.com/perforce/r13.1/manuals/p4v/Working_with_changelists.html

撤消恢复或撤消所做的更改。它这样做的方式是,P4在本地工作空间的变更列表(默认的或新的)中撤消更改。然后,我们必须提交/提交这个退出变更列表,就像我们做其他变更列表一样。第二部分在这里很重要,因为它不会自动撤销服务器上的更改列表,我们必须提交撤销更改列表(这在您执行后是有意义的,但我最初假设它会自动执行)。

正如其他人指出的那样,Rollback具有更强大的功能——它可以将更改恢复到特定的日期、更改列表或修订#

我通过比较Perforce变更列表和堆栈(来自数据结构)向用户解释了这一点。

撤销将从堆栈中的任何位置删除一项。

回滚将从堆栈顶部移除n个项。

简单地说,这种差别是一种多元性:

  • 拆除从单个更改列表中退出(不管是否是最近的)。也就是说,它撤销了单个更改列表。
  • 回滚回滚尽可能多的更改,以获得以前的更改列表。也就是说,它撤销了多个变更列表。

我过去常常忘记哪个是哪个,最后不得不查很多次。为了解决这个问题,想象回滚为几个旋转,然后希望回滚是复数的事实将帮助你(和我!)记住哪个是哪个。对我来说,拆除听起来比回滚“不那么复数”。想象一下从停车位倒车出来。

所以,助记法是:

  • 回滚 →多个旋转
  • 拆除 →倒车出车位

我希望这能有所帮助!