如何解决gerrit代码冲突(git)

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

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

注意:出现合入不了,显示“cannot merge”,首先尝试下点击下页面得rebase按钮,如下:

 

如果还是显示冲突,在使用下面的方法。

情况一:报错“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”,如下:

 

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

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

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

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

               (主要是为了防止在原工程下操作,导致切分支失败或者代码不小心丢了,如果不想克隆代码,可以先将本地的改动使用git stash命令保存下,关于git stash的使用不在本文中说明,可自行查找)

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

    git checkout -b ccc remotes/origin/bbb

  1. Cherry-pick 改动到本地

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

 

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

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

然后执行git status,如下:

 

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

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

》》》》》

  原来gerrit上的内容

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

 你的修改

《《《《《《《《

 

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

     git add test.txt

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

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

 

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

 

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

 

点击submit即可提交。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值