github上的一次 pull request
出現了 conflicts
,須要解決合併衝突:html
衝突的內容主要是新增功能的代碼和修改的註釋:git
因爲以前沒有更新分支,同時又提交了分支中的代碼,而git不能在不丟失提交的狀況下對遠程庫進行修改。github
解決思路:把原倉庫的 master
分支 fetch
到本地,merge
後再 push
bash
原倉庫的 master
分支和本地的 jellyfishmix
分支發生了衝突,咱們須要把原倉庫的 master
分支拉取到本地,才能進行後續處理。服務器
第一步,須要先設置原倉庫的地址。app
git remote add [原倉庫的名字,可自定義] git@github.com:xxse/xx.git
複製代碼
例如本文中使用:編輯器
git remote add gpake/qiniu-wxapp-sdk git@github.com:gpake/qiniu-wxapp-sdk.git
複製代碼
原倉庫的地址在本地中就有了記錄,給原倉庫地址起的名字叫 "gpake/qiniu-wxapp-sdk"fetch
使用 pull
拉取原倉庫的 master
分支:spa
git pull gpake/qiniu-wxapp-sdk master:jellyfishmix
複製代碼
提示:
pull
的格式(參考自 git pull命令的用法).netgit pull <遠程倉庫名> <遠程分支名>:<本地分支名> 複製代碼
git pull拉取遠程分以後會與本地分支進行合併
看到執行結果中提示:! [rejected] master -> jellyfishmix (non-fast-forward)
此提示說明沒法將原倉庫的master分支與本地的jellyfishmix進行合併,緣由分析可見:Git錯誤non-fast-forward
解決此問題的兩步操做:
git fetch
把遠程分支拉取到本地git merge
與本地分支合併(若是有衝突就要解決衝突後再合併)本文中,博主執行:
git fetch gpake/qiniu-wxapp-sdk master
git merge FETCH_HEAD jellyfishmix
複製代碼
執行結果提示:Automatic merge failed; fix conflicts and then commit the result.
最初考慮使用 rebase
解決此問題,關於 git rebase
的介紹請參考:Rebase 代替合併
可是 git rebase
存在危險性,詳情請看上面連接的那篇文章.故決定不實用git rebase,而使用手動解決衝突的方式。
vi
編輯存在衝突的文件
例如,存在衝突的位置:
<<<<<<< HEAD
// qiniuShouldUseQiniuFileName 若是是 true,則文件的 key 由 qiniu 服務器分配(全局去重)。
=======
// 若是是 true,則文件的 key 由 qiniu 服務器分配 (全局去重)。
>>>>>>> FETCH_HEAD
複製代碼
=======
上下是發生衝突的兩個分支,咱們要保留的是HEAD分支的內容,刪除衝突位置HEAD分支之外的內容,變成以下:
// qiniuShouldUseQiniuFileName 若是是 true,則文件的 key 由 qiniu 服務器分配(全局去重)
複製代碼
:wq
保存退出
或者也可使用圖形化IDE的編輯器來編輯存在 conflicts
的文件。
將全部存在 conflicts
的文件均進行這樣的手動操做。
執行 git commit
git commit -am '修復了與master分支的合併衝突'
複製代碼
執行 git push
git push origin jellyfishmix
複製代碼
去 pull request
看一下 conflicts
是否已解決:
成功解決 conflicts
!