git 解沖突需要注意的問題
弄清除沖突雙向的修改意圖,並在解決沖突時,同時處理兩邊的意圖。
舉例說明
A.txt 文件,
在 master 分支上,有一行文字(代碼)是這樣:
這是一段在 master 分支上的文字。
Alice 在 dev 分支上,修改了這段文字(代碼),修改后如下:
在 dev 上,將 master 的文字修改為這段文字;
並添加了其它文字;
如果是代碼,這些代碼相互關聯。
Bob 基於 master 分支開發功能,在 f/feature 分支上,也修改了這段代碼,如下:
在一個功能分支(f/feature)上修改 master 上的代碼;
以及與之相關的其它內容。
現在,Bob 需要把 dev 分支的代碼合並到 f/feature 分支上,git 命令:(@f/feature) git merge dev
將得到一個沖突。
如何解決這個沖突?
解沖突
解沖突推薦使用 GUI 工具,因為直觀。這里介紹 tortoisegit 解沖突的操作。
(圖1)操作入口:
(圖2)沖突列表:
(圖3)文件的解沖突頁面
對於比較簡單的沖突,直接應用某一邊的修改,或者做一下簡單的編輯(圖3中,下面的區域是可以編輯的。)
對於復雜沖突,需要了解兩邊對同一段代碼的修改意圖,即對方(Remote)為什么要這樣改,要達到什么目的?本方(Local)為什么要這么改,要達到什么目的?
修改比較復雜是,在圖3的界面中,可能看不清具體的修改內容,可以在 tortoisegit 中查看兩邊修改前后的對比。
(圖4)查看兩邊具體的修改。
下面是一張稍顯復雜的兩邊修改的對比圖。
(圖5)兩邊修改對比
通過圖5 ,可以具體查看兩邊的修改意圖,具體在解沖突是,可能沒辦法一次處理完。
這時需要先在臨時處理沖突(如應用某一邊的修改),並記錄下另一邊的修改(如保留這個窗口,或者截圖。)
在 git 的沖突處理完之后(這里其實只是形式上處理完了,實際上丟棄了某一邊的修改),再修改代碼。
更復雜的情況,可能兩邊對代碼的改動都非常大,需要代碼重構才能解決問題。當然,這個情況很少,也應該避免發生。
補充
如圖1和圖5所示,其中的 Remote 指被合並過來的分支,這里是在 f/feature 上合並 dev , 則 Remote 指 dev 上的修改,Local 指 f/feature 上的修改。
重點
兼顧兩邊的修改意圖,不能因為解沖突,丟失了某一邊的修改。