[Git]git extensions 建立分支和合併解決衝突(2)

Git-git extensions 建立分支和合併解決衝突(2)

前言

 

這一章則想記錄一下,如果我們有新功能要開發,或者是遇到衝突的時候,使用此工具又要怎麼來操作,首先我們就來建立一個新的分支吧,假設我們現在要在原有程式碼新增一個功能展示,但只是展示並無確定方向的需求,所以我們命名為poc,這樣可能會大改的功能,不會干擾到原有的版控,但又同時可以保留此版本在本機,一旦確定方向是對的時候,我們就可以在視情況合併回來

 

image

 

建立分支,各自commit

 

 

接著我們來建立一個分支,這個分支我就命名為poc,我們可以看一下gui,如何切換分支

 

image

 

目前我處在poc的分支,可以看到有一個箭頭是處在poc,紅框那邊也有顯示目前的分支,我在poc這邊加上一些文字修改,然後假設我做完了,就commit進去版控

 

image

image

 

poc的功能還未展示,但目前的功能已有需求,需要修改,所以我再切換回master做原有功能的修改

 

image

 

接著我繼續原有功能的修改,或已確認新功能的開發,然後也做master的commit,然後我們就可以看到了,poc和master都有各自的commit,而且commit的內容都不一樣

 

image

image

image

 

merge(合併)

 

 

某天user已確認我們poc就是他想要的,大方向沒錯,我們的prototype可以直接做成產品了,這時候我們就可以用merge,然後把poc這個分支給刪除掉了,我的習慣是會在原分支上,然後把要merge的分支給合併回來,所以我會切到master分支,在做接下來的動作,我們可以點著poc的分支,然後按右鍵選擇merge

image

 

或者是在上面的選項,選擇Commands做merge

 

image

 

做merge的時候需注意一下,我框起來的兩個選項,第一項是做merge但不會自動產生新的commit,第二項則是會自動幫你commit一版,在此我選擇merge則自動commit一版的選項。

 

image

 

接下來就出現衝突需要我們處理的畫面了

 

image

 

 

解決衝突並合併

 

 

在此為何我會造成衝突呢??假如我原本的master都沒有異動,那我merge回來當然會就是poc的版本,也不會造成任何衝突,但我原有需求也異動了,而且也自行commit了,poc的版本也又各自commit,想要合併的時候,git並不知道我們該怎麼處理兩種檔案不一的狀況,所以造成衝突,接下來就來解決衝突吧,當我按下ok之後,會出現下面的畫面

 

image

image

 

要解決衝突的工具我們可以自行選擇預設工具,我就用預設的,但如果習慣visual studio的話,也可以把預設改掉,然後按下Merge就會出現預設工具讓我們看如何解決衝突

 

image

 

也可以在底下衝突的地方,按右鍵選擇要保留左邊中間或右邊哪個區塊,其實也很直覺,比如說我們保留了master最新版還有poc的版本,就可以直接存檔了,然後把merge的工具直接關掉

 

image

 

接著可以看到跳出一個視窗,問我們是否要馬上commit,就直接選擇是

 

image

 

接著就回到commit的視窗,會很貼心的自動幫我們產生一個衝突多出來的檔案,如果我們是pull同事的程式碼造成衝突,在解決完之後,其實這支程式碼是可以留著保存,之後有問題的時候可以追蹤當初的原樣,但如果是自己造成的,想必也很清楚是什麼情況,那就不需要保留直接移除,然後再commit,工具預設幫我們都產生了什麼地方merge回什麼地方的訊息。

 

image

 

接著我們就可以把poc的分支給移除掉,不需要保留了

 

image

 

最後我們的原始碼就是merge完的final版了

 

image

 

總結

 

git其實相對其他的版控工具,真的是有比較靈活和彈性,但觀念上也是比較複雜,工具又非常多種,我有用過四種的git版控工具,但其實只要知道觀念,要上手另外一種工具應該很快,面對大企業則又有git flow的流程,各種工具其實也都有支援,在此我就記錄一下,也方便自己以後回來查閱,再請多多指教。