如何解决gerrit代码冲突

日常开发中,我们存在多人开发和同一个人提交多次记录的情况,这就避免不了代码冲突的情况出现。

下面介绍几种gerrit提交失败的现象,后续会根据大家遇到的情况,持续更新。

情况一:报错“Submit including parents”

 举例:程序员A在bbb分支上创建(修改)了test.txt文件,并提交到gerrit上,此次提交为commit1,但是没有合入,此时test.txt的内容如下:

hello, this is commit1

  然后A又在本地修改了test.txt,然后提交到了gerrit上,此次提交为commit2,此时test.txt的内容如下:

hello, this is commit1

hello, this is commit2

此时gerrit上就有两次提交,很明显,commit2的内容包含了commit1的内容,可认为commit1是commit2的parent节点。

A想,既然commit2 包含了commit1,直接提交commit2就好了,于是就把commit1执行了abondon丢掉了,此时gerrit 代码review的时候发现失败了,显示为“Submit including parents”,如下:

submit including parents.PNG

那么解决问题的关键点就是解决冲突。

此时解决的步骤如下:(我们用test工程来说明问题)

  1. 克隆一份新的代码到本地

git clone ssh://anl@$gerritip:29418/test

  1. 基于冲突问题分支创建一个新的分支,比如冲突问题分支为bbb,新建分支为ccc

git checkout -b ccc remotes/origin/bbb

  1. Cherry-pick 改动到本地

   Cherry-pick命令来自gerrit上的download下箭头,位置如下:

cherry-pick-command.PNG

file:///C:\Users\justi\AppData\Local\Temp\ksohtml\wps2AC1.tmp.jpg

直接复制这条命令下来,执行:

git fetch ssh://anl@$gerritip:29418/test refs/changes/88/788/1 && git cherry-pick FETCH_HEAD

然后执行git status,如下:

test1.PNG

备注:新建的文件,会如上显示,如果是修改原文件,git status 会显示冲突文件前会显示“conflicts:”字段,显示什么不重要,重要的是git status看出有问题的文件是哪个。

有冲突的,开发判断哪些代码是需要的,冲突内容按照如下方式显示:

》》》》》

  原来gerrit上的内容

==============

 你的修改

《《《《《《《《

 

删除冲突部分,然后再执行git add,如下:

     git add test.txt

备注,如果git status看到的所有文件都是需要提交的,直接“git add .”即可,否者按需要执行git add。

 然后再执行git commit -s ,此时会看到如下,删除其中的conflicts和对应的文件,如下

11.PNG

保存后推出继续提交,然后执行git push origin HEAD:refs/for/问题分支,比如下:

33.PNG

Git push执行成功后,再刷新gerrit页面,submit按钮有了,可以提交了,如下:

22.PNG

点击submit即可提交。

猜你喜欢

转载自www.cnblogs.com/zndxall/p/9140813.html