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

时间:2012-10-11 13:07:54

标签: git gerrit

我正在使用Gerrit版本2.4.2。我有一个分支master,我创建了一个名为newbranch的新分支。然后我将一些更改推送到遥控器(Gerrit's)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)

我该怎么办?

3 个答案:

答案 0 :(得分:33)

据报道,这种情况是Gerrit的一个错误。以下是Gerrit's issue tracker的解决方案/解决方法:

  

据我所知,您目前有2个选项 -

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

  2.   
  3. 继续并创建合并提交。使用'git merge --no-ff' - 即使在快进的情况下没有必要,也会创建合并提交。然后可以像平常一样上传,审核,验证和合并合并提交。

  4.         

    我的公司倾向于使用选项2.我会将此作为wontfix关闭,但如果您对如何做到这一点有任何建议,请告诉我们。

答案 1 :(得分:8)

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

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

git merge --no-ff

答案 2 :(得分:0)

以下命令可以正常工作。

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

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