2

这是我们的情况:

  • 我们复制了流 A 的内容,这是对我们的安全基础设施的更改,主要内容是。
  • 然后我们将内容合并到流 B 中。
  • 然后我们在流 B 中进行了一些其他不相关的更改。
  • 然后我们意识到来自流 A 的更改并没有我们想象的那么好,我们决定将其撤消以确保安全。
  • 我们取消了包含流 A 更新的修订。
  • 这具有删除一些文件并更改其他文件的效果。
  • 我们在没有更改流 A 的情况下进行了测试,一切正常。
  • 同时,开发人员对流 A 进行了一些小改动,我们准备将流 A 合并回流 B。

问题是,我们可以复制到 main,但我们不能将这些更改返回到流 B,因为“删除流 A”的更改更新。我们希望将之前撤消的所有更改以及新更改都恢复原状。

有没有办法做到这一点,而不需要大量的手动工作来手动复制或手动合并所有内容?

谢谢。

4

4 回答 4

1

我不熟悉 Perforce 流,但传统上 Perforce 没有任何特殊的回退概念。撤消更改只会创建反向更改集。

因此,要重新应用已撤销的更改,您应该能够仅撤销撤销。

于 2012-09-16T00:04:23.230 回答
1

首先运行p4 changes -i @n,n其中 n 是从 main 到 B 的合并的更改列表编号,其中包含您退出的 A 更改。这为您提供了更改列表,其中第一个是 n 本身,其余的是您需要重新合并到 B 的 main 更改。但是,您不能使用“p4 merge”重新合并,但必须使用'p4 integ -f'。

例如,假设 n 为 1000:

p4 changes -i @1000,1000
Change 1000 ...
Change 994  ...
Change 991  ...
Change 866  ...

这告诉您必须将 866、991 和 994 从 main 重新合并到 B。如果您不是在挑选,您可以假设这些是 main 中的连续更改,并且您可以使用 866 到 994 作为修订范围:

p4 integ -f -r -S //stream/B @866,994
p4 resolve
p4 submit

(这个 integ 命令示例假定 //stream/main 是 //stream/B 的父级。当然,您必须在 //stream/B 工作区中执行此操作。为了获得最佳结果,您可能想要以确保您的工作区已完全同步,并且在运行 integ 之前您没有打开的文件。)

于 2012-09-13T08:54:22.563 回答
1

您可以随时退出已退出的更改列表。这样,您将到达进行第一次更改的地步。

请记住,所有文件历史记录都已保存,因此所有更改都应该在像您这样的情况下轻松恢复。

于 2012-09-17T18:25:45.943 回答
0

您最近的更改是删除,因此它不会重新添加文件,因为它已经打开以进行删除。在该文件上运行 p4 revert,然后执行 p4 add,它对我有用。

于 2013-07-23T20:57:33.477 回答