gerrit上提示代码冲突的时候,我们首先会想到rebase下,不行的话就只能解决冲突了,最简单的做法是我的另一篇博客https://www.cnblogs.com/zndxall/p/9140813.html 中的方法,但是有的时候还是会出现问题,报错commit xxxx is a merge but no -m option was given,如下:

git cherry-pick 报错is a merge but no -m option was given-LMLPHP

或者执行git cherry-pick 4e73b64a5fc251e6ff82aa1db4316bd4ecd389d5 是一样的效果。

出现这个问题,是因为提交的代码之前pull 了其他人的代码并合入了自己本地的代码,产生了一个merge操作以后,又push到代码仓,就会出现这种情况,我们看下他的提交日志:

git cherry-pick 报错is a merge but no -m option was given-LMLPHP

分3个点解释,标记“1”很明显是一个merge操作,标记“2”是他自己的改动,标记“3”我们看到parent节点有两个,一个merge里有多个父节点,cherry-pick的时候至少要指定一个父节点,可以用-m parent-num来指定,parent-num 默认从1开始,比如上面的两个父节点,

git cherry-pick 报错is a merge but no -m option was given-LMLPHP

上面一个父节点29b3eb321d8f512616fad12ce40d7ed22d5d4371的parent-num 为1  ,

下面一个父节点43bd1d238829f067547ebd8f372a6ded5732690a的parent-num为2,

那么在cherry-pick的时候,如果选定父节点为第一个的话,

命令为 git cherry-pick 4e73b64a5fc251e6ff82aa1db4316bd4ecd389d5 -m 1

结果如下:

git cherry-pick 报错is a merge but no -m option was given-LMLPHP

(备注:如果这里显示失败的话,如果没有失败的话,不用关心这一步,如图:

git cherry-pick 报错is a merge but no -m option was given-LMLPHP

是因为你cherry-pick了两次,所以需要取消上次的cherry-pick操作,有多种方式,一种是回退到比较老的节点,然后pull最新代码,一种是基于目标分支重新建一个分支专门用来做cherry-pick)

接着再执行git status ,会提示冲突文件,如下:

git cherry-pick 报错is a merge but no -m option was given-LMLPHP

修改冲突文件后,执行git add . (即add 所有修改),然后git commit -s 写评论,然后git push origin HEAD:refs/for/$branch提交入库即可 ($branch为你的当前工作分支)。

05-08 15:51