gerrit上提示代碼沖突的時候,我們首先會想到rebase下,不行的話就只能解決沖突了,最簡單的做法是我的另一篇博客https://www.cnblogs.com/zndxall/p/9140813.html 中的方法,但是有的時候還是會出現問題,報錯commit xxxx is a merge but no -m option was given,如下:

或者執行git cherry-pick 4e73b64a5fc251e6ff82aa1db4316bd4ecd389d5 是一樣的效果。
出現這個問題,是因為提交的代碼之前pull 了其他人的代碼並合入了自己本地的代碼,產生了一個merge操作以后,又push到代碼倉,就會出現這種情況,我們看下他的提交日志:

分3個點解釋,標記“1”很明顯是一個merge操作,標記“2”是他自己的改動,標記“3”我們看到parent節點有兩個,一個merge里有多個父節點,cherry-pick的時候至少要指定一個父節點,可以用-m parent-num來指定,parent-num 默認從1開始,比如上面的兩個父節點,

上面一個父節點29b3eb321d8f512616fad12ce40d7ed22d5d4371的parent-num 為1 ,
下面一個父節點43bd1d238829f067547ebd8f372a6ded5732690a的parent-num為2,
那么在cherry-pick的時候,如果選定父節點為第一個的話,
命令為 git cherry-pick 4e73b64a5fc251e6ff82aa1db4316bd4ecd389d5 -m 1
結果如下:

(備注:如果這里顯示失敗的話,如果沒有失敗的話,不用關心這一步,如圖:

是因為你cherry-pick了兩次,所以需要取消上次的cherry-pick操作,有多種方式,一種是回退到比較老的節點,然后pull最新代碼,一種是基於目標分支重新建一個分支專門用來做cherry-pick)
接着再執行git status ,會提示沖突文件,如下:

修改沖突文件后,執行git add . (即add 所有修改),然后git commit -s 寫評論,然后git push origin HEAD:refs/for/$branch提交入庫即可 ($branch為你的當前工作分支)。
