Unity3d 如何在P4V(Perforce)中正确撤消错误提交?

Unity3d 如何在P4V(Perforce)中正确撤消错误提交?,unity3d,perforce,Unity3d,Perforce,好的,所以我使用Perforce P4V为一个Unity项目备份我的工作。我的一个队友检查了图元文件的一些更改,这些更改破坏了一切。没问题,对吧?这就是使用P4的全部意义。我们可以把它恢复过来。只有你没用吗 我看到的行为是 更改列表1中的文件A已更改 更改列表2中的文件B已更改, 更改列表3中的文件C和A已更改 假设变更列表3包含错误的变更 我在历史记录中单击了变更列表2,然后单击了获取修订,并选中了强制操作框。 变更列表2是最后一个已知的良好状态,我期望发生的是将我的所有文件恢复到提交变更列表

好的,所以我使用Perforce P4V为一个Unity项目备份我的工作。我的一个队友检查了图元文件的一些更改,这些更改破坏了一切。没问题,对吧?这就是使用P4的全部意义。我们可以把它恢复过来。只有你没用吗

我看到的行为是 更改列表1中的文件A已更改 更改列表2中的文件B已更改, 更改列表3中的文件C和A已更改

假设变更列表3包含错误的变更 我在历史记录中单击了变更列表2,然后单击了获取修订,并选中了强制操作框。 变更列表2是最后一个已知的良好状态,我期望发生的是将我的所有文件恢复到提交变更列表2时的状态

相反,文件C已恢复,但文件A未恢复。这就像,因为文件A在变更列表2中没有更改,所以它不需要费心去获取那个版本

所以我处于一个所有unity元文件都被破坏,所有预制引用都被破坏的状态

当这不起作用时,我尝试使用get revision返回到最新状态。然后使用Backout。这同样不起作用,元文件仍然残废。然后,我尝试选择最后一个已知的良好状态,并将整个项目文件夹回滚到该状态。再说一次,没用。但话说回来,我可能在那个时候严重地破坏了我的项目,以至于什么都不起作用

我发现,恢复文件和恢复断开链接似乎是正确的唯一方法,即手动选择每个文件或文件夹,并将其恢复到最后一次良好提交,这对于每个文件/文件夹来说都是不同的,因为它们是在不同的提交中添加和更改的

我不明白的是,为什么警察局自己不这么做。或者,撤销错误提交的“正确”方法是什么

我甚至尝试删除整个assets文件夹,然后使用get-revision-force使用最后一次已知的正确提交从服务器中提取一个全新的副本。有一次,它似乎工作得很好,但当我试图重复它来验证我的结果时,它又回到了丢失所有元文件链接的状态。恢复到良好状态的唯一可靠方法似乎是手动强制将每个文件和文件夹提交到单个最后已知的良好提交


这一次我不得不手动修复我的错误,但我真的非常感谢您的帮助,让我知道如何以正确的方式为将来解决这个问题。

使用
p4 undo
命令

p4 undo @BADCHANGELIST
p4 submit
就这些

(在P4V中有一个类似的操作,名为“backout”--我在使用它时遇到了困难,我更喜欢使用命令行,因为它更简单,但是很简单。)

请注意,
p4 undo
p4 revert
是完全不同的命令!许多人对此感到困惑,因为
git
调用了它的“undo”命令
git revert
,但是
p4 revert
git revert
不同(更像是
git reset--hard
)。您不能使用
p4 revert
撤消已提交的内容;它仅用于将您的待定工作从仓库恢复到最新提交状态

我看看能不能解释一下你的尝试出了什么问题:

假设变更列表3包含错误的更改,我在历史记录中单击了变更列表2,然后单击了获取修订,并选中了强制操作框。变更列表2是最后一个已知的良好状态,我期望发生的是将我的所有文件恢复到提交变更列表2时的状态

相反,文件C已恢复,但文件A未恢复。这就像,因为文件A在变更列表2中没有更改,所以它不需要费心去获取那个版本

IIRC当您单击变更列表并使用它在P4V中进行同步时,它默认为执行
p4 sync@CHANGE,CHANGE
,而不是
p4 sync@CHANGE
——正如您所观察到的,如果您试图在整个工作区中“回滚”到较早的状态,这是非常没有帮助的。您可能可以通过单击“同步”对话框中的复选框来解决此问题。我相信如果你点击“文件夹历史记录”视图中的变更列表,它会使用路径(
p4 sync path/…@CHANGE
),这应该会更好


一旦您成功地将工作区同步到较旧的状态,如果您想使该状态永久化,您需要打开
edit
(“在P4V中签出”)、
sync
的文件以安排解析(“在P4V中获取最新信息”)、
resolve
(这也是“解析”)在P4V中,确保您接受
您的
工作区版本(P4V可能会称之为“接受目标”,我不确定),然后
提交
。同样,我建议只使用
p4 undo
,这样您就可以跳过所有手动步骤。

使用
p4 undo
命令

p4 undo @BADCHANGELIST
p4 submit
就这些

(在P4V中有一个类似的操作,名为“backout”--我在使用它时遇到了困难,我更喜欢使用命令行,因为它更简单,但是很简单。)

请注意,
p4 undo
p4 revert
是完全不同的命令!许多人对此感到困惑,因为
git
调用其“undo”命令
git revert
,但是
p4 revert
git revert
(更像是
git reset--hard
)。您不能使用
p4 revert
撤消已提交的内容;它仅用于将您的挂起工作从仓库还原为最新提交状态

我看看能不能解释一下你的尝试出了什么问题:

假设变更列表3包含错误的更改,我在历史记录中单击了变更列表2,然后单击了“获取修订”,并选中了“强制操作”框。变更列表2是最后一个已知的良好状态。我期望发生的是将我的所有文件恢复到变更列表2运行时的状态