如何改进gerrit验证为-1的提交?

时间:2015-12-03 07:40:01

标签: git gerrit

如果在gerrit中将提交标记为verify = -1,那么开发人员如何更改提交并重新发送git审核? 据我所知,顶级提交可以通过git commit --ammend进行更改,但是如何在之前(不在顶部)改进其他提交。

enter image description here

1 个答案:

答案 0 :(得分:2)

我对gerrit的经验在版本2.7.0(约1。5年前)停止了,但我猜主要原则保持不变。适合Gerrit审核的提交标有行Change-Id: Ixxxx,其中xxxx是20位十六进制值(SHA-1输出)。此标识符用于匹配同一提案的更新版本,因此,如果您推送具有相同ID的提交,它将由gerrit呈现为相同更改的更新“补丁集”,尽管其 git id已被更改。

如果您有一个未合并的提交序列,并且您必须更改非最终提交,请使用git interactive rebase(git rebase --interactive)更新此序列中的提交。您可以选择更新这些提交的方法 - 例如手动编辑,或使用修复和使用fixup命令创建另一个提交...这不是主体。作为此更改的结果,您将获得更新的序列。例如,3-commit系列的初始版本是:

git id = 1234, gerrit id = Iabcd;
git id = 5678, gerrit id = Ief01;
git id = 9abc, gerrit id = I2345.

编辑完第一次提交后,您将拥有:

git id = 9876, gerrit id = Iabcd;
git id = 5432, gerrit id = Ief01;
git id = 10fe, gerrit id = I2345.

正如人们所看到的,git id会发生变化,但是gerrit id却没有变化。然后,推送整个序列(通过最终提交ID或简单地HEAD),gerrit网站将显示相同提交的新补丁集(通过gerrit id和branch的组合将它们匹配)。

您还可以添加新提交(它们将在基本仪表板视图中无序显示),放弃一些(例如与其他人合并)...还可以重新生成gerrit-id(如果是id,则默认提交挂钩会执行此操作手动删除行),删除旧提交历史记录的连接。

如果验证挂钩处于活动状态,则将重新检查整套新补丁集;它还需要人工审查。使用默认审阅策略时,所有标记-1,0,+ 1,+ 2都不会自动传递到同一提交的新补丁集,但会传递-2,因此相应的审阅者必须更改它,即使他没有不说新观点。

在我的实践中,我习惯于形成这样的提交的长序列,如果需要进行适当的工作,比如深度重构,是的,有时候序列开头的提交需要改变。这种情况的真正含义是,任何审阅者都必须重新批准以后的提交,即使它们没有被更改,并且同一提交的补丁集之间的gerrit diff暴露了提交序列中较早发生的所有更改。我希望这将在未来的一些gerrit版本中得到帮助。