通过Gerrit UI恢复到旧的修补程序集版本?

通过Gerrit UI恢复到旧的修补程序集版本?,gerrit,Gerrit,如果Gerrit中的一个更改有多个补丁集版本,那么我似乎只能提交最新的补丁集版本(因为只有那个版本有必要的按钮)。是否有一种简单的方法来代替提交相同更改的一个旧补丁集版本,只在Gerrit实例上使用我的web浏览器 我知道我可以从我的git客户端获取想要的补丁集版本,并将其作为另一个新的补丁集版本推到顶部,但我希望避免在评论和讨论中多次使用相同的补丁集版本。不,抱歉,这目前不可能。该设计假定开发人员将审查和测试最新的补丁集,因此不能提交较旧的补丁集。也无法对其进行审查/验证。如果要使用较旧版本的

如果Gerrit中的一个更改有多个补丁集版本,那么我似乎只能提交最新的补丁集版本(因为只有那个版本有必要的按钮)。是否有一种简单的方法来代替提交相同更改的一个旧补丁集版本,只在Gerrit实例上使用我的web浏览器


我知道我可以从我的git客户端获取想要的补丁集版本,并将其作为另一个新的补丁集版本推到顶部,但我希望避免在评论和讨论中多次使用相同的补丁集版本。

不,抱歉,这目前不可能。该设计假定开发人员将审查和测试最新的补丁集,因此不能提交较旧的补丁集。也无法对其进行审查/验证。如果要使用较旧版本的修补程序集,必须重新提交该修补程序集,使其成为最新的修补程序集。为了避免没有新的更改错误,请执行
git提交--amend
,git将创建一个新的sha1,Gerrit将乐于接受它作为一个新的补丁集。

仅使用Gerrit UI并没有合适的方法来实现这一点。Cherry选择“更改列表”中的特定“修补程序集”(例如,如果更改列表中有15个修补程序集,并且希望恢复为修补程序集#8)。从Gerrit UI获取所需修补程序集的cherry pick命令


运行cherry-pick命令,使用git-commit--amend,然后推动您的更改。它将生成新的补丁集(例如上面的例子#16)

这不起作用:当推送一个旧补丁集的提交时,我得到了错误“没有新的更改”。这有点复杂。您需要实际恢复补丁集在您想要的补丁集之后引入的更改,然后将这些恢复修改为审阅并重新提交。这将使您回到所需补丁集所代表的状态。如果你知道你在寻找什么,你可能可以通过reflog来完成这一点,但我必须让真正的git向导来完成。这里有一些方法可以奏效,尽管这可能有点麻烦:在reflog中找到最新补丁集的头状态,称之为X,以及要恢复到的补丁集的头状态,称之为Y.Do
git diff HEAD@{X}HEAD@{Y}git apply--index
。现在,您已经准备好了撤消Y和X之间所做的所有更改的更改。执行git commit--amend,然后重新提交审阅。现在,您有了一个新的补丁集,它可以让您回到所需补丁集的状态。您不需要跳过那么多障碍。只要不做任何事情,
git commit--amend
将为相同的提交创建一个新的sha1。你可以把这个发给gerrit,它会认为这是一个新补丁。谢谢@Milimetric!这正是我需要的。在有用的评论下读到你的名字是一个很好的惊喜:)我认为这是一个有效的答案,那么为什么这是-1?也许值得添加一个用例:“意外地推了rebase commit,否则是相同的”。现在+2批准已丢失,需要纠缠同事重新审核