我正在使用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
但格里特回复了这条消息:
! [remote rejected] master -> refs/for/master (no new changes)
我该怎么办?
据报道,这种情况是Gerrit的一个错误。以下是Gerrit's issue tracker的解决方案/解决方法:
据我所知,您目前有2个选项 -
- 强制推动参考/头部。这只是一个快进,所以理论上一切都已经过审查和验证。没有必要再次这样做,所以只需跳过这个过程并推送到refs / heads而不是refs / for。
- 继续并创建合并提交。使用'git merge --no-ff' - 即使在快进的情况下没有必要,也会创建合并提交。然后可以像平常一样上传,审阅,验证和合并合并提交。
我的公司倾向于使用选项2.我会将其关闭为wontfix,但如果您对如何做到这一点有任何建议,请告诉我们。
如果合并是快进合并,则不存在推送到gerrit的对象,因为快进只是移动分支指针。
您需要通过避免快进来强制合并创建对象:
git merge --no-ff
以下命令可以完美地运行。
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 / *'的引用(将来会涵盖所有分支)。然后,如果需要提交GCR,则将“推送合并提交”权限授予此参考和“提交”权限。
现在,再次尝试上面的push命令,它应该工作。
积分:
https://github.com/ReviewAssistant/reviewassistant/wiki/Merging-branches-in-Gerrit