Monday 6 February 2017

Git 解決合併分支時的檔案衝突 Resolve conflicts while merging branches

Preface

上一篇的筆記有提到如何進行 Git 分支合併,但在多人協同開發的環境底下,往往一定會遇到檔案發生衝突的狀況。這裡教大家單純的使用 Git 的 checkout 功能來解決衝突。

Tutorial

當你使用 merge 指令去合併分支的時候,有衝突發生時,Git 會要求使用者解決衝突,才能夠完成 merge 的動作。當 Auto merge 沒有成功時候會跳出警告的訊息。

解決衝突的三個方法:

  1. 直接打開該檔案進行修改
  2. 使用 checkout --theirs, checkout --ours 來直接選定要改為哪個 branch 上的版本

1. 直接打開檔案進行修改

這個方法很直覺,可以避免掉很多錯誤。因為你必須逐行的處理衝突的檔案。

修改完有衝突的檔案後,可以直接循 commit 的流程來完成 merge 的動作
$ git add --all
$ git commit

2. checkout --theirs, checkout --ours

這是一個比較快速的做法,可以執行 status 指令來查詢

$ git status

modified a.file
modified b.file

both modified c.file
此時 c.file 被標記為 both modified 的檔案,c.file 就是發生衝突的檔案,此時要確認哪個分支上的版本是最新版的。這裡假設 feature branch 上的 c.file 是最新版的。則執行下列指令

#請注意 --ours, --theirs 指的是哪個分支上的 c.file
#我們已經切換到 develop branch 上
#所以 --ours 指的是 develop 上的 c.file
#欲使用 feature branch 上的 c.file 所以要使用 --theirs

$ git checkout --theirs c.file
$ git add c.file
此時會我們再用 status 確認一次目前分支的狀態會得到下列的結果

$ git status

modified a.file
modified b.file
modified c.file
c.file 也被標記為 modified 之後,就可以進行 commit 了
$ git commit -a

0 comments:

Post a Comment