现象
使用Gerrit做代码评审时遇到的一个问题,现象是:一个项目分支上出现了另一个项目分支的大量代码,但是在Gerrit web页面上看不到merge的提交。
怎么发现的
不同版本作diff,发现一个项目分支上有另一个项目分支的代码。
原因
直接原因
研发人员的提交代码不规范,而代码评审操作也太过简单(没有发现问题)。
研发人员同时参与了两个项目,但是提交代码是图方便(代码下载慢、机器空间不够……),基于A项目的代码,往B项目的分支上提交
。
这样操作可以提交上去,但是Gerrit Web上会有两个提示:
- 提交的
parent
旁边有黄点,表示该提交的parent不是库中目标分支的HEAD - 提示
merge confilict
如果提示了merge confilict
,这样就只能重新做提交,不会出现问题;而第一种原因,如果直接+1、+2、submit,就极有可能出问题。
间接原因
Gerrit 的submit action操作使用了merge if necessary
,所以在submit之后使用了merge的方式(将该提交所在的parent一起merge了进来)。
避免
- 修改代码时不要图方便,使用
git checkout
切换到目标分支上之后再做修改,进行提交。 - 代码提交到Gerrit Web上之后,使用页面的
rebase
按钮,做一下页面rebase。