git多人合作開發(fā)項目中,經常會遇到需要合并分支。因為可能會對同一個文件進行了修改,git merge --no-ff -m "merge with no-ff" dev,之后解沖突,下面介紹我遇到的iOS合并分支中遇見的解沖突情況,記錄下。
通常合并分支后,會造成xcodeproject工程文件打不開。解決方案分為如下六步。
image

image
- 選中工程文件->右鍵顯示包內容
image- 雙擊這個文件,用Xcode打開
image- 打開之后顯示這個樣紙
image- 使用快捷鍵 cmd + F(搜索),在彈出的搜索框中輸<<< 或者 >>> 或者 ====,其中的任何一個都行,然后敲一下回車(enter鍵)說明
<<<<<<< HEAD代表是工程文件沖突的開始
=====分割線d0d695000a8e250672dad0b7954d7d18a6cc17a0結束image
- 刪掉>>>HEAD和===和>>>>>>>d0d695000a8e250672dad0b7954d7d18a6cc17a0,E16D957A1CD616610095F921 /* Resource /和E1F1D2271CD602F5002AC55F / MainViewController.swift */保留一個
image- 重復查找,如果還有沖突的地方,同上,保存 cmd + s。工程文件能順利打開
image
image
image
如果使用了cocoapods,除了對同一個.h或.m文件修改有沖突之外,還會有podfile文件和podfile.lock文件沖突了??梢岳胹ourceTree進行解沖突。
- 現(xiàn)在點擊 “Working Copy” 分區(qū)。你會看到受合并沖突影響的文件都在左側有個感嘆號。
image- 使用 SourceTree 解決 git 中的合并沖突,使用 “mine” 或 “theirs” 來解決,這是修復 git 中的合并沖突最簡單的方式。如果你右擊任意有沖突的文件,它會在 “Resolve Conflicts” 下面顯示兩個選項。
image- “Mine” 表示沖突文件在你當前分支上的內容?!癟heirs” 表示沖突文件在傳入分支上的內容——嘗試合并到當前分支的那個分支。
注意:如果是回滾操作,“Theirs” 表示沖突文件在回滾區(qū)塊上的內容。
所以,通過選擇 “Mine” 或 “Theirs”,你只是指示 git 丟棄其中一個版本,并使用另外那個版本。
如何決定選擇哪個版本?下個問題你可能要問,我怎么知道該選擇哪個版本——“Mine” 還是 “Theirs”?
大部分情況下,你應該已經知道怎么做,因為你知道每個分支中提交的內容。那就可以跳過這個部分。但如果不是,也不要擔心。選擇沖突的文件,然后可以在右側看到文件的內容。仔細注意這里的模式,你會在每個有合并沖突的文件中看到它。
image
<<<<<<< HEAD
...content on current branch...
=======
...content on incoming branch...
>>>>>>> change (or the name of whatever your incoming branch is)
你可以把 HEAD 看作當前分支。在上面的例子里,就是 “master” 分支。
從 <<<<<<< HEAD 到 ======= 那行之間的就是當前分支上的內容。從 ======= 到 >>>>>>> 你的傳入分支名之間的就是傳入分支上的內容(在上面的例子中就是 “change”)
image- 還要記住在用 SourceTree 讀取文件的時候,可以跳過紅色標注的行,因為它們已經被刪了。綠色標注的那些是新添加的。
image
你可能正在處理一個巨大的文件,在多個部分有多個沖突,那么 SourceTree 里面的視圖可能不夠用。對于這些情況,我推薦下面的兩種方法。
- 還有可能遇到xib和storyboard無法打開的情況,因為可能xcode版本存在差異。彈窗報錯:Interface builder was unable to determine the type of xxx.xib
image- 可以想到,應該是合并造成xib文件版本沖突,一種簡單的方式可以拿最新的版本直接覆蓋出問題的xib文件。但是這種辦法簡單粗暴,沒有深入探究該xib文件問題到底出在哪里。聯(lián)想到代碼發(fā)生版本沖突時,頭文件或實現(xiàn)文件中,會標記出沖突的代碼,那么出問題的xib文件對應的源碼中同樣也應該存在沖突的代碼。帶著這樣的想法,我打開了該xib文件的源碼。選中xib文件->右鍵->Open As->Source Code,打開xib文件對應的xml文檔:可以清楚地看到,沖突的地方已經被標記出來。原因是toolsVersion和systemVersion版本沖突,是最近升級系統(tǒng)和Xcode引起的。去掉working的部分~
image- 重新pod install或pod update,程序能重新運行。














