舉例
分成兩個分支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異動紀錄裡有
- [衝突的檔案]
- 新增了[一堆不是自己branchA動過的檔案]
如果是用eclipse+JGIT可以看下面這個commit的圖片
這個時候有兩種解決方式
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,