git提交代碼到gerrit失敗

                                       git提交代碼到gerrit失敗

一、前言

tips:如果我們想在gerrit上管理代碼。那麼你的每次提交都要帶上一個commit_id,這樣才能保證你能push到遠端的rfes/for/master上。(注意是這個Change_id)

要每次提交代碼的時候都帶上一個這樣的唯一標識:

怎麼生成唯一標識可自行查找 

二、背景:

提交代碼的正確姿勢:

1:提交代碼git add .  git commit --amend(注意這裏一定是amend,因爲要保證每次的patchset是同一次提交)

2:拉取遠端最新的變化git fetch --all

3:rebase主幹分支(master)的代碼變化git rebase origin/master -i

4:提交代碼到主幹分支 git push origin HEAD:refs/for/master

錯誤復現:

提交代碼沒有問題,在拉取遠端最新的分支變化的時候我執行的是git catch(起的git命令別名。這裏我以爲執行的是git fetch --all其實是git remote update origin --prune)前者是拉取遠程分支的變動,後者是更新分支的變動。所以實際上並沒有更新遠程分支的代碼。這時候我push到遠程分支被拒絕。所以我就reset到master的上一次提交,然後再add, commit --amend,push -f 自己開發的遠程分支成功了。push origon HEAD: refs/for/master也成功了。但是比較尷尬的是我是把別人的提交都合到我自己的這次提交了。這肯定是有問題的。提示錯誤如下。

這是因爲我們的提交包含的遠程master的提交。包含了很多master已經提上去的代碼。所以這裏一直提示衝突。 

三、解決思路

1:首先我們rebase origin/master分支的代碼,這時候再push肯定是不行的。因爲我們的這次提交包含了master已經存在的代碼。

2:我們reset到master的最新一次提交,這時候我們再rebase origin/master,再提交還是不OK,因爲我們分支上的最新一次提交

包含了之前的master的提交,還是有重複代碼的出現。

3:我們從開發分支上切出一個新的分支,reset到最新的master提交。rebase我們的遠程開發分支的內容。這時候我們把所

有內容stash,再去rebase origin/master的內容,這時候保存master的提交記錄。再stash或apply 把代碼應用於基於現在

的提交。再提交 push成功。

四:總結

1:解決衝突的方法有很多,不要試着用reset方式解決衝突。尤其是在rebase方式合併代碼的情況。reset適合(你自己分支開發的,只有你自己提交代碼,想把多個提交合併成一個提交。其實這時候可以在rebase遠程的時候加個-i)

2:rebase遠程代碼的時候注意是rebase origin/master 如果是rebase origin master 分支會跳到master,並且在master上執行rebase。

3:不要rebase本地分支的代碼,一定要rebase 遠程分支的。因爲rebase本地的時候會在在你的分支有一個合併的提交記錄。會拒絕你的push操作。

3:如果碰到自己不能解決的問題,一定要及時求助,並且做好代碼的備份。最好的方式就是切到新分支保存自己的內容。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章