Git-git extensions 建立分支和合併解決衝突(2)
前言
這一章則想記錄一下,如果我們有新功能要開發,或者是遇到衝突的時候,使用此工具又要怎麼來操作,首先我們就來建立一個新的分支吧,假設我們現在要在原有程式碼新增一個功能展示,但只是展示並無確定方向的需求,所以我們命名為poc,這樣可能會大改的功能,不會干擾到原有的版控,但又同時可以保留此版本在本機,一旦確定方向是對的時候,我們就可以在視情況合併回來
建立分支,各自commit
接著我們來建立一個分支,這個分支我就命名為poc,我們可以看一下gui,如何切換分支
目前我處在poc的分支,可以看到有一個箭頭是處在poc,紅框那邊也有顯示目前的分支,我在poc這邊加上一些文字修改,然後假設我做完了,就commit進去版控
poc的功能還未展示,但目前的功能已有需求,需要修改,所以我再切換回master做原有功能的修改
接著我繼續原有功能的修改,或已確認新功能的開發,然後也做master的commit,然後我們就可以看到了,poc和master都有各自的commit,而且commit的內容都不一樣
merge(合併)
某天user已確認我們poc就是他想要的,大方向沒錯,我們的prototype可以直接做成產品了,這時候我們就可以用merge,然後把poc這個分支給刪除掉了,我的習慣是會在原分支上,然後把要merge的分支給合併回來,所以我會切到master分支,在做接下來的動作,我們可以點著poc的分支,然後按右鍵選擇merge
或者是在上面的選項,選擇Commands做merge
做merge的時候需注意一下,我框起來的兩個選項,第一項是做merge但不會自動產生新的commit,第二項則是會自動幫你commit一版,在此我選擇merge則自動commit一版的選項。
接下來就出現衝突需要我們處理的畫面了
解決衝突並合併
在此為何我會造成衝突呢??假如我原本的master都沒有異動,那我merge回來當然會就是poc的版本,也不會造成任何衝突,但我原有需求也異動了,而且也自行commit了,poc的版本也又各自commit,想要合併的時候,git並不知道我們該怎麼處理兩種檔案不一的狀況,所以造成衝突,接下來就來解決衝突吧,當我按下ok之後,會出現下面的畫面
要解決衝突的工具我們可以自行選擇預設工具,我就用預設的,但如果習慣visual studio的話,也可以把預設改掉,然後按下Merge就會出現預設工具讓我們看如何解決衝突
也可以在底下衝突的地方,按右鍵選擇要保留左邊中間或右邊哪個區塊,其實也很直覺,比如說我們保留了master最新版還有poc的版本,就可以直接存檔了,然後把merge的工具直接關掉
接著可以看到跳出一個視窗,問我們是否要馬上commit,就直接選擇是
接著就回到commit的視窗,會很貼心的自動幫我們產生一個衝突多出來的檔案,如果我們是pull同事的程式碼造成衝突,在解決完之後,其實這支程式碼是可以留著保存,之後有問題的時候可以追蹤當初的原樣,但如果是自己造成的,想必也很清楚是什麼情況,那就不需要保留直接移除,然後再commit,工具預設幫我們都產生了什麼地方merge回什麼地方的訊息。
接著我們就可以把poc的分支給移除掉,不需要保留了
最後我們的原始碼就是merge完的final版了
總結
git其實相對其他的版控工具,真的是有比較靈活和彈性,但觀念上也是比較複雜,工具又非常多種,我有用過四種的git版控工具,但其實只要知道觀念,要上手另外一種工具應該很快,面對大企業則又有git flow的流程,各種工具其實也都有支援,在此我就記錄一下,也方便自己以後回來查閱,再請多多指教。