使用git fetch和git merge手動解決一次pull request衝突

問題提出

github上的一次 pull request 出現了 conflicts ,須要解決合併衝突:html

01 pull request出現衝突.png

衝突的內容主要是新增功能的代碼和修改的註釋:git

02 conflict展現-新增內容.png

03 conflict展現-修改註釋.png

問題思考

因爲以前沒有更新分支,同時又提交了分支中的代碼,而git不能在不丟失提交的狀況下對遠程庫進行修改。github

解決思路:把原倉庫的 master 分支 fetch 到本地,merge 後再 pushbash

問題解決

設置原倉庫地址

原倉庫的 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

拉取原倉庫master分支

使用 pull 拉取原倉庫的 master 分支:spa

git pull gpake/qiniu-wxapp-sdk master:jellyfishmix

提示:pull 的格式(參考自 git pull命令的用法.net

git pull <遠程倉庫名> <遠程分支名>:<本地分支名>

git pull拉取遠程分以後會與本地分支進行合併

04 git remote, git pull.png

看到執行結果中提示: ! [rejected] master -> jellyfishmix (non-fast-forward)

此提示說明沒法將原倉庫的master分支與本地的jellyfishmix進行合併,緣由分析可見:Git錯誤non-fast-forward

解決本地分支與原倉庫master分支的衝突

解決此問題的兩步操做:

  1. git fetch 把遠程分支拉取到本地
  2. git merge 與本地分支合併(若是有衝突就要解決衝突後再合併)

本文中,博主執行:

git fetch gpake/qiniu-wxapp-sdk master
git merge FETCH_HEAD jellyfishmix

05 git fetch, git merge.png

執行結果提示:Automatic merge failed; fix conflicts and then commit the result.

最初考慮使用 rebase 解決此問題,關於 git rebase 的介紹請參考:Rebase 代替合併

可是 git rebase 存在危險性,詳情請看上面連接的那篇文章.故決定不實用git rebase,而使用手動解決衝突的方式。

vi 編輯存在衝突的文件

06 vi 編輯conflicts.png

例如,存在衝突的位置:

<<<<<<< HEAD
        // qiniuShouldUseQiniuFileName 若是是 true,則文件的 key 由 qiniu 服務器分配(全局去重)。
=======
        // 若是是 true,則文件的 key 由 qiniu 服務器分配 (全局去重)。
>>>>>>> FETCH_HEAD

======= 上下是發生衝突的兩個分支,咱們要保留的是HEAD分支的內容,刪除衝突位置HEAD分支之外的內容,變成以下:

// qiniuShouldUseQiniuFileName 若是是 true,則文件的 key 由 qiniu 服務器分配(全局去重)

07 vi 編輯conflicts,手動刪除衝突.png

:wq 保存退出

或者也可使用圖形化IDE的編輯器來編輯存在 conflicts 的文件。

將全部存在 conflicts 的文件均進行這樣的手動操做。

08 將全部存在 conflicts 的文件均進行這樣的手動操做.png

從新提交

執行 git commit

git commit -am '修復了與master分支的合併衝突'

執行 git push

git push origin jellyfishmix

09 執行git commit和git push.png

pull request 看一下 conflicts 是否已解決:

10 成功解決conflicts.png

成功解決 conflicts !

one more thing...

可選方案

文末附 在Git的PR(Pull Request)提示衝突沒法merge合併的解決方案

11 可選方案.png

相關文章
相關標籤/搜索