好的,所以我使用Perforce P4V来备份我的统一项目的工作。我的一个队友签了一些图元文件的更改,这破坏了一切。不过没问题对吧?这就是使用P4的全部意义。我们可以把它恢复过来。只有..。恢复不起作用了?
我所看到的行为是文件A在变更列表1中更改,文件B在变更列表2中更改,文件C和A在变更列表3中更改。
假设Changelist 3包含我在历史上单击changelist 2的坏更改,然后单击get修订,并选中Force操作框。变更者2是最后一个已知的良好状态,我期望发生的是将我的所有文件恢复到我提交变更列表2时的状态。
相反,文件C被恢复,但是文件A没有。就像,因为文件A在变更列表2中没有改变,所以它没有费心去获得那个版本。
所以我所处的状态是,所有的统一元文件都被残废,所有的预置引用都被破坏。
当这不起作用时,我尝试使用get修改回到当前的状态。然后用回退。同样地,元文件也不起作用,仍然残废。然后,我尝试选择最后一个已知的良好状态,并将整个项目文件夹滚动回该状态。再说一次,没起作用。但话又说回来,我可能在那个时候严重致残了我的项目,结果什么都没有用。
我发现正确地还原文件和还原损坏的链接的唯一方法是手动选择每个文件或文件夹并将其还原到最后一个好的提交,这对于每个文件/文件夹是不同的,因为它们是在不同的提交中添加和更改的。
我不明白的是为什么力得到修正没有做它自己。或者撤销错误提交的“正确”方法是什么。
我甚至尝试删除整个资产文件夹,然后使用get修订强制使用最后一个已知的良好提交从服务器中提取一个全新的副本。这似乎是完美的一次,但当我试图重复它来验证我的结果,它回到失去所有的元文件链接。恢复到良好状态的唯一可靠方法似乎是手动强制将每个文件和文件夹发送到最后已知的好提交。
我已经委托自己必须手动修复我的错误,但我真的很感激帮助,知道如何做这一正确的方式为未来。
发布于 2021-03-07 20:01:34
使用p4 undo
命令。
p4 undo @BADCHANGELIST
p4 submit
非那样做不行!
(在P4V中有一个类似的操作称为"Back“-我在使用它时遇到了困难,我更喜欢使用命令行,因为它更容易,但是YMMV。)
注意,p4 undo
和p4 revert
是完全不同的命令!许多人对此感到困惑,因为git
调用它的“撤销”命令git revert
,但是p4 revert
与git revert
不一样(更像git reset --hard
)。您不能使用p4 revert
撤消已经提交的内容;它只用于将挂起的工作从仓库恢复到最新的提交状态。
我看看能不能解释一下你的企图出了什么问题:
让我们假设Changelist 3包含了我在历史上单击changelist 2的坏更改,然后单击get修改,并选中了Force。变更者2是最后一个已知的良好状态,我期望发生的是将我的所有文件恢复到我提交变更列表2时的状态。
相反,文件C被恢复,但是文件A没有。就像,因为文件A在变更列表2中没有改变,所以它没有费心去获得那个版本。
当您单击一个变更列表并使用它在P4V中同步时,它默认为执行p4 sync @CHANGE,CHANGE
而不是p4 sync @CHANGE
--正如您所观察到的,如果您试图在整个工作区“回滚”到早期状态,这是非常没有帮助的。您可能可以通过单击同步对话框中的复选框来修复这个问题。我相信,如果您单击“文件夹历史”视图中的更改列表,它使用的是路径(p4 sync path/...@CHANGE
),它应该工作得更好。
一旦您成功地将工作区同步到旧状态,如果您想使该状态永久化,您需要打开edit
( P4V中的“签出”)、sync
来调度一个解析(P4V中的“获取最新”)、resolve
(在P4V中也是“解决”)、确保您接受your
工作区版本(我不确定P4V可能称之为“接受目标”),然后是submit
。同样,我建议您只使用p4 undo
,这样您就可以跳过所有这些手动步骤。
https://stackoverflow.com/questions/66519945
复制相似问题