"Rebase if necessary" 的 Gerrit 项目:Gerrit 说 "Cannot Merge" 但手动 rebase 可以吗?

Gerrit project with "Rebase if necessary": Gerrit said "Cannot Merge" but manual rebase was okay?

我们有一个 "Submit Type" 设置为 "Rebase if necessary" 的 gerrit 项目。更改的自动验证是通过 Jenkins 构建完成的。

当存在并发更改时(例如,更改 A 和 B 都基于相同 parent),当一个更改(例如 A)得到审核、提交和合并时,另一个更改(例如B) 将有一个 parent 即 "Not current"

这部分我明白了。

我不明白的是:如果我们已经选择了提交类型"Rebase if necessary",为什么Gerrit还会说"Cannot Merge"?为什么它不自动变基 B?

事实上,我确实看到一些并发更改接受了自动变基处理。但这不会一直发生。为什么?

通常,在 Gerrit Web UI 上,B 的 parent 的散列旁边会有一个橙色点,上面写着 "Not current -- rebase possible"。会不会有一个案例说 "Not current -- rebase NOT possible"?

(如果变基是可能的,那么 Gerrit 为什么不自动执行?)

最后一个问题:当按下按钮 [Rebase] 时,会出现一个标题为 "Code Review - Rebase Change" 的弹出窗口 window。然后是 "Change parent revision" 的复选框和“(主题、更改编号或留空)”的文本字段。我们应该如何使用复选框和文本字段?

谢谢!

1) 自动变基

首先检查您的项目是否启用了内容合并:

Projects > List > YOUR-PROJECT > General > Allow content merges = true

然后请记住,如果存在必须手动解决的冲突,Gerrit 无法自动执行变基。在这些情况下,您需要在本地执行 rebase,解决冲突并将另一个补丁集推送到 Gerrit。

2) 变基选项

该复选框用于选择要在变基中使用的不同父修订。默认父版本为:

  • 如果更改不依赖于另一个打开的更改,它将重新定位到目标分支的顶端。

  • 如果更改依赖于另一个打开的更改,它将重新基于该其他更改的当前补丁集。

查看更多信息here