上篇博文,我們講了SourceTree提交代碼的方式,其中涉及到提交的時候,如果有代碼衝突,我們如何解決,在本篇博文,就細細道來,希望通過此篇博文,你能完全掌握SourceTree解決衝突的方法。
一、產生衝突的原因
當同一個文件,A修改了代碼,B也修改了代碼,如果修改的行號有重疊的時候,就會出現代碼衝突。
二、衝突文件標識
在SourceTree的提交界面,有幾種標誌:
代表有修改的內容
代表刪除的文件
代表未加入到倉庫的文件
代表有衝突的內容
三、SourceTree提供的衝突解決辦法
我們右鍵點擊有衝突的文件,會出現如下圖示:
- 啓用外部合併工具:我們後面着重講解
- 使用‘我的版本’解決衝突:使用自己的本地的代碼作爲衝突解決的方案
- 使用‘他人版本’解決衝突:使用git倉庫中已經提交的代碼作爲衝突解決的方案
- 重新合併、標記爲已解決、標記爲未解決沒什麼用處,此處可以不用管
四、啓用外部合併工具
在SourceTree的Diff窗口,可以配置外部合併工具,如下圖所示:
裏面有多種合併工具可供選擇:BeyondCompare、Araxis Merge、Diff Merge、File Merge等,BeyondCompare可能以前用SVN的時候有許多人用過,但關於git的代碼合併,我個人並不習慣用BeyondCompare,我個人比較推薦的是Araxis Merge,這款工具的三個窗口界面比較符合代碼合併的操作習慣。下面我就爲你詳細介紹,如何使用Araxis Merge。
五、Araxis Merge
Araxis Merge是一個可視化的文件比較、合併和同步的軟件。
在此篇文章中,Araxis Merge的詳細使用細節,我就不做過多贅述了,我覺得通過這篇博文介紹,你可以使用Araxis Merge自如的合併衝突就足夠了。
- 下載和安裝Araxis Merge
- 在上面第四節的圖片中,將可視對比工具和合並工具都選擇爲Araxis Merge
- 在衝突文件右鍵“解決衝突”->“啓用外部合併工具”,默認就會彈出Araxis Merge的合併頁面,如下圖:
可以看到Araxis Merge把代碼分成了三個框,
- 左邊框:遠程倉庫中的代碼
- 右邊框:本地倉庫中的代碼
- 中間:本地倉庫提交之前的代碼
左邊框、右邊框中,與本地提交之前的代碼變動,都會顯示紅色區域塊,你可以一目瞭然到底什麼地方有了改動,你需要知道的是,最後合併後的代碼是中間框裏面的代碼。
如果你想把左邊的代碼合併,就點擊一下左邊框中的箭頭,則對應的代碼塊自動添加的中間框中,如果想把右邊框的代碼合併,方法一樣。如果兩邊的代碼你都想在合併後保留,你可以手動複製粘貼到中間框中,只要你明確了一點,中間框中的代碼是合併後的代碼,怎麼操作你就可以自己隨意了。
合併完成後,在SourceTree中會有兩個文件,一個是你合併後的文件,一個是合併前的原始文件有.orig後綴,合併完成後,你可以檢查下合併後的文件是否有問題,如果有問題,可以重新合併,方法如下:
- 刪除之前合併後的代碼
- 把.orig文件的後綴去掉
- 右鍵去掉.orig後綴的文件->解決衝突->標記爲未解決
- 重新使用啓用外部合併工具的方式解決衝突。
六、提交或者合併的代碼怎麼回滾
有時候,你可能已經把代碼提交到git倉庫,或者把另一個分支合併到了當前分支,此時發現有問題,想要把代碼回滾,用SourceTree怎麼操作呢?
在此時你需要選中一個當前分支的提交節點:
這裏有許多的提交,單當前分支最近的一次提交是藍色的這個,右鍵->分支,以當前節點創建新分支,就可以把代碼回滾到當前節點的上一次提交處,你學會了麼?
七、總結
至此,SourceTree解決衝突的方案,就說完了,如果你還有疑問,可以在下方給我留言。
本篇博文主要說了幾點:
- 產生衝突的原因:多人開發時,兩個人修改了同一文件的相同行
- SourceTree提供的解決衝突的辦法:使用我的版本解決衝突,使用他人版本解決衝突,啓用外部文件解決衝突
- 配置外部合併工具的方式
- 使用Araxis Merge解決衝突的具體操作步驟:要點是中間框是最後合併後的文件