弄清除衝突雙向的修改意圖,並在解決衝突時,同時處理兩邊的意圖。
html
A.txt 文件,git
在 master 分支上,有一行文字(代碼)是這樣:工具
這是一段在 master 分支上的文字。
Alice 在 dev 分支上,修改了這段文字(代碼),修改後以下:ui
在 dev 上,將 master 的文字修改成這段文字; 並添加了其它文字; 若是是代碼,這些代碼相互關聯。
Bob 基於 master 分支開發功能,在 f/feature 分支上,也修改了這段代碼,以下:3d
在一個功能分支(f/feature)上修改 master 上的代碼; 以及與之相關的其它內容。
如今,Bob 須要把 dev 分支的代碼合併到 f/feature 分支上,git 命令:(@f/feature) git merge dev
將獲得一個衝突。
如何解決這個衝突?code
解衝突推薦使用 GUI 工具,由於直觀。這裏介紹 tortoisegit 解衝突的操做。htm
(圖1)操做入口:blog
(圖2)衝突列表:開發
(圖3)文件的解衝突頁面get
對於比較簡單的衝突,直接應用某一邊的修改,或者作一下簡單的編輯(圖3中,下面的區域是能夠編輯的。)
對於複雜衝突,須要瞭解兩邊對同一段代碼的修改意圖,即對方(Remote)爲何要這樣改,要達到什麼目的?本方(Local)爲何要這麼改,要達到什麼目的?
修改比較複雜是,在圖3的界面中,可能看不清具體的修改內容,能夠在 tortoisegit 中查看兩邊修改先後的對比。
(圖4)查看兩邊具體的修改。
下面是一張稍顯複雜的兩邊修改的對比圖。
(圖5)兩邊修改對比
經過圖5 ,能夠具體查看兩邊的修改意圖,具體在解衝突是,可能沒辦法一次處理完。
這時須要先在臨時處理衝突(如應用某一邊的修改),並記錄下另外一邊的修改(如保留這個窗口,或者截圖。)
在 git 的衝突處理完以後(這裏其實只是形式上處理完了,實際上丟棄了某一邊的修改),再修改代碼。
更復雜的狀況,可能兩邊對代碼的改動都很是大,須要代碼重構才能解決問題。固然,這個狀況不多,也應該避免發生。
如圖1和圖5所示,其中的 Remote 指被合併過來的分支,這裏是在 f/feature 上合併 dev , 則 Remote 指 dev 上的修改,Local 指 f/feature 上的修改。
兼顧兩邊的修改意圖,不能由於解衝突,丟失了某一邊的修改。