40

我正在使用 Gerrit 2.4.2 版。我有一个分支master,我创建了一个新分支,名为 newbranch. 然后我将一些更改推送到遥控器 (Gerrit's) newbranch。在 Gerrit 中验证后,我将更改合并到newbranch.

不,我想合并newbranchto master,发送更新master(与来自 的更改合并newbranch),然后删除newbranch分支。

我试过这样做:

git fetch
git checkout master
git merge newbranch
git push origin master:refs/for/master

但是 Gerrit 回馈了这条信息:

 ! [remote rejected] master -> refs/for/master (no new changes)

我应该怎么办?

4

3 回答 3

36

这种情况已被报告为 Gerrit 中的一个错误。这是Gerrit 的问题跟踪器的解决方案/解决方法:

据我所知,您目前有两种选择 -

  1. 强制推到裁判/头。这只是一个快进,所以理论上一切都已经过审查和验证。再次这样做是没有意义的,因此只需跳过该过程并推送到 refs/heads 而不是 refs/for。

  2. 继续并创建一个合并提交。使用 'git merge --no-ff' - 这将创建一个合并提交,即使在你的快进情况下它不是必需的。然后可以像往常一样上传、审查、验证和合并合并提交。

我的公司倾向于选择选项 2。我会以 wontfix 的形式关闭它,但如果您对如何更好地做到这一点有任何建议,请告诉我们。

于 2012-10-11T13:57:02.667 回答
11

如果合并是快进合并,则不存在推送到 gerrit 的对象,因为快进只是移动分支指针。

您需要通过避免快进来强制合并创建对象:

git merge --no-ff
于 2014-06-23T17:06:47.083 回答
2

以下命令完美运行。

git checkout master
git merge --no-ff newbranch

您可以使用默认提交消息保存。确保已生成更改 ID。您可以使用以下命令来确定。

git commit --amend

然后使用以下命令推送。

git push origin HEAD:refs/for/refs/heads/master

您可能会遇到如下错误消息。

! [remote rejected] HEAD -> refs/for/refs/heads/master (you are not allowed to upload merges)

为了解决这个问题,gerrit 项目管理员必须在 gerrit 中创建另一个名为 'refs/for/refs/heads/master' 或 'refs/for/refs/heads/*' 的引用(这将涵盖未来的所有分支)。然后授予此引用的“Push Merge Commit”权限,如果需要提交 GCR,则授予“提交”权限。

现在,再次尝试上面的推送命令,它应该可以工作。

学分:

https://github.com/ReviewAssistant/reviewassistant/wiki/Merging-branches-in-Gerrit

https://stackoverflow.com/a/21199818/3877642

于 2019-04-05T12:08:18.450 回答