git 如何将Gerrit分支合并到另一个Gerrit分支

14ifxucb  于 11个月前  发布在  Git
关注(0)|答案(3)|浏览(368)

我使用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)


我该怎么办?

oxcyiej7

oxcyiej71#

这种情况已经被报告为Gerrit中的一个bug。下面是来自Gerrit's issue tracker的解决方案:
据我所知,你现在有两个选择-
1.强制推送到refs/heads。这只是一个快进,所以理论上一切都已经被审查和验证过了。再次这样做没有意义,所以跳过这个过程,直接推送到refs/heads而不是refs/for。
1.继续创建一个合并提交。使用'git merge --no-ff' -这将创建一个合并提交,即使在快进的情况下它是不必要的。然后合并提交可以像正常一样上传,审查,验证和合并。
我的公司倾向于选择2。我会关闭这个作为wontfix,但如果你有任何建议,如何做到这一点更好,请让我们知道。

7xzttuei

7xzttuei2#

如果合并是快进合并,则不存在要推送到gerrit的对象,因为快进只是移动分支指针。
您需要通过避免快进来强制合并以创建对象:

git merge --no-ff

字符集

46qrfjad

46qrfjad3#

下面的命令工作得很好。

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时授予“Submit”权限。
现在,再次尝试上面的push命令,它应该工作。
学分:
https://github.com/ReviewAssistant/reviewassistant/wiki/Merging-branches-in-Gerrit
https://stackoverflow.com/a/21199818/3877642

相关问题