如何解決gerrit代碼沖突


日常開發中,我們存在多人開發和同一個人提交多次記錄的情況,這就避免不了代碼沖突的情況出現。

下面介紹幾種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下箭頭,位置如下:

cherry-pick-command.PNG

直接復制這條命令下來,執行:

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即可提交。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM