我使用Gerrit版本2.4.2。我有一个分支master
,我创建了一个新的分支,名为newbranch
。然后我将一些更改推送到远程(Gerrit的)newbranch
。在Gerrit中验证后,我将更改合并到newbranch
。
否,我想将newbranch
合并到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)
型
我该怎么办?
3条答案
按热度按时间oxcyiej71#
这种情况已经被报告为Gerrit中的一个bug。下面是来自Gerrit's issue tracker的解决方案:
据我所知,你现在有两个选择-
1.强制推送到refs/heads。这只是一个快进,所以理论上一切都已经被审查和验证过了。再次这样做没有意义,所以跳过这个过程,直接推送到refs/heads而不是refs/for。
1.继续创建一个合并提交。使用'git merge --no-ff' -这将创建一个合并提交,即使在快进的情况下它是不必要的。然后合并提交可以像正常一样上传,审查,验证和合并。
我的公司倾向于选择2。我会关闭这个作为wontfix,但如果你有任何建议,如何做到这一点更好,请让我们知道。
7xzttuei2#
如果合并是快进合并,则不存在要推送到gerrit的对象,因为快进只是移动分支指针。
您需要通过避免快进来强制合并以创建对象:
字符集
46qrfjad3#
下面的命令工作得很好。
字符集
您可以使用默认提交消息进行保存。请确保已生成更改ID。您可以使用以下命令进行确认。
型
然后按下以下命令。
型
您可能会遇到类似下面的错误消息。
型
要解决此问题,gerrit项目管理员必须在gerrit中创建另一个名为“refs/for/refs/heads/master”或“refs/for/refs/heads/*”的引用(将来将覆盖所有分支)。然后授予此引用“Push Merge Commit”权限,并在需要提交GCR时授予“Submit”权限。
现在,再次尝试上面的push命令,它应该工作。
学分:
https://github.com/ReviewAssistant/reviewassistant/wiki/Merging-branches-in-Gerrit
https://stackoverflow.com/a/21199818/3877642的