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

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

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

出现这个问题,是由于提交的代码以前pull 了其余人的代码并合入了本身本地的代码,产生了一个merge操做之后,又push到代码仓,就会出现这种状况,咱们看下他的提交日志:日志

分3个点解释,标记“1”很明显是一个merge操做,标记“2”是他本身的改动,标记“3”咱们看到parent节点有两个,一个merge里有多个父节点,cherry-pick的时候至少要指定一个父节点,能够用-m parent-num来指定,parent-num 默认从1开始,好比上面的两个父节点,htm

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

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

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

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

结果以下:class

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

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

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

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

相关文章
相关标签/搜索