在使用Gerrit做评审的时候,在本次push有提交内容的情况下,遇到这个奇葩错误[remote rejected] develop-> refs/for/develop(no new changes)
。
具体情况如下:
我使用develop分支创建了一个新的功能分支A,并将修改的代码push到Gerrit(对应远程的分支A),并在Gerrit完成评审。接着,我需要将分支A合并到develop分支。我在本地完成merge操作(没有冲突),这个时候再提交到远程的develop,客户端提示我[remote rejected] develop-> refs/for/develop(no new changes)
。
后来在网上看到这篇文章,具体内容如下:
问题描述:
[email protected]$ git push Total 0 (delta 0), reused
0 (delta 0) remote: Processing changes: refs: 1, done To
ssh://[email protected]:29418/ElastosRDKforEmulator ! [remote
rejected] master -> refs/for/master (no new changes) error: failed to
push some refs to ‘ssh://[email protected]:29418/ElastosRDKforEmulator‘
回答: 这个提示表示没有新的提交。Gerrit审核根据commit
id和changeId来判断是否是新的提交。如果两个分支的内容完全一模一样(一般出现在初次建立新的分支的时候),那么有可能从A分支merge到B分支后,B分支生成的commit
id和changeId完全一样(这种情况只要两个分支的内容不一样就不可能发生),这时Gerrit审核判断已经有了相同的内容,因此拒绝提交。
解决办法是通过git commit –amend生成新的changeId。
文章中的情况与我的情况应该基本类似,于是我尝试在本地merge操作完成后,再次修改一个文件(敲几个空格),commit后,再次push到Gerrit。操作成功。但是Gerrit中出现的要评审的内容只有我第二次修改的那个文件的内容。完成评审后再检查其他数据,发现第一次提交的内容已经成功merge到远程的develop上了。