git merge conflict

git 衝突解法

舉例

分成兩個分支master & branchA & branchB

這時候branchB先merge master to branchB發現沒有異動,
所以直接先gitlab上MR branchB to master成功,

再來,branchA也先做merge master to branchA,這時候git會先嘗試fast-forward merge,如果merge成功,就沒問題,git自動會幫你做commit

如果fast-forward merge失敗(比方說branchA和branchB都有異動到同一份檔案),
就會發現出現了衝突,這個時候git當然不會幫你commit,

你將會發現git status異動紀錄裡有

  1. [衝突的檔案]
  2. 新增了[一堆不是自己branchA動過的檔案]

如果是用eclipse+JGIT可以看下面這個commit的圖片

upload successful

這個時候有兩種解決方式

reset

剛開始可能因為看到[一堆不是自己branchA動過的檔案]會嚇到,
這時候可以把自己原本有異動的檔案自己用editor存下來,在reset回舊版的master,
然後git pull,讓他先更新成最新版本的master(也就是有branchB merge進去的版本),
在手動把剛editor存下來的檔案比對最新檔案,再把code push上去

解衝突

把 [衝突的檔案] 修正成正確的code,然後add/commit/push,


這時候要非常小心,不要把[一堆不是自己branchA動過的檔案]拿掉,其實這邊的[一堆不是自己branchA動過的檔案]就是剛剛branchB先異動過的檔案,如果這時候把這些拿掉,其實就代表了把舊版master的code蓋過來了,
這樣branchB原本先上的code就不見了(git視為你已經修正完衝突),造成蓋版事件

再來gitlab上MR branchA to master,