接續上篇文章 Git GUI – (3) branch、conflict、merge

 【六、取得最新檔案(fetch, merge, pull)】

在開發程式的時候,可能在同一時間有許多工程師做修改的動作,剛開始可以先用 fetch 指令來查看看遠端倉儲中是否有較新的檔案。如果有最新檔案,可以使用合併(merge)來將檔案合併到目前本地倉儲。fetch 跟 pull 的功能非常類似,fetch 負責檢查遠端倉儲中是否有更新版本的檔案,接著讓工程師手動合併檔案;而 pull 則是先呼叫 fetch 檢查有無新版本後,由系統自動做合併動作,也就是 pull = fetch + merge。遇到無法解決的衝突(conflict)才需要透過手動處理。

  1. 開始改動檔案前先檢查是否有檔案版本是否有更新。滑鼠右鍵 -> TortoiseGit -> Fetch
    image157.png
    image159.png
  2. 「64f1f65..7c8a8af master  ->  origin/master」表示有檔案更新(如上圖),並且已經將檔案儲存在暫存區。下圖[up to date]則是表示目前本地倉儲中的檔案已經是最新版本(與遠端倉儲一致)。
    image162.png
  3. (此步驟目的在檢查版本差異,可跳過直接進入第5點合併差異)如果沒有版本更新就可以不用理會,若有版本更新要處理,可透過滑鼠右鍵「TortoiseGit」選單,接著點選「Diff with previous version」來查看有哪些內容的變更。
    image170.png
  4. 點選「RefBrowse」設定要比較的來源檔案,將 Version 1 設定成遠端倉儲分支,Version 2 設定成本地倉儲分支。
    image177.png
    image179.png
  5. 設定完 Ref 後,如下圖,下方的框框會顯示這兩個版本有哪些變動。(修改了README.txt,以及多了一個 newFile.txt 檔案。在檔案上點選滑鼠左鍵兩下,可以看到兩個版本的檔案內容比較。
    image184.png
    image186.png
  6. 開始進行合併動作,滑鼠右鍵「TortoiseGit」選單 ->「Merge…」,選擇要合併的分支,並填寫 Merge Message。如果沒有發生衝突,合併完成後會出現 Success 字樣。
    image196.png
    image198.png
  7. 接著我們嘗試使用 pull 來更新並合併版本庫。滑鼠右鍵「TortoiseGit」選單 -> 「Pull…」。選取遠端要 pull 的倉儲分支,出現 Success 的字樣表示成功合併。
    image206.png
    image208.png

 【七、衝突情況】 

衝突是使用版本控制經常遇到的情況,以下將介紹衝突處理方式。

  1. 如下圖,當 push 檔案回遠端倉儲時,出現以下錯誤訊息。
    image210.png
  2. 當 push 發生衝突時,可以透過 (1) fetch+merge 或 (2) pull 來解決。以下只說明使用 fetch + merge 處理方式( pull 操作較為簡單,可自行練習使用)。
  3. 滑鼠右鍵「TortoiseGit」選單 -> 「Fetch…」
    image157.png
  4. 從遠端倉儲抓了較新的資料,接著我們把他和我們的版本合併在一起。滑鼠右鍵「TortoiseGit」選單 -> 「Merge…」。From的部份要選擇遠端的分支,例如:remotes/origin/master,填入Merge Message。
    image159.png
    image196.png
  5. 系統自動執行合併時發現有衝突,導致無法自動合併。關閉視窗後,可以看到衝突的檔案變成黃色三角形驚嘆號。
    image129.png
    image229.png
  6. 在 newFile.txt 上點選滑鼠右鍵開啟「TortoiseGit」選單 -> 「Diff」,即可開始編輯有衝突的部份(符號說明),修改完成後儲存檔案。
    image235.png
  7. 接著把剛剛做的變更 commit 到本地倉儲中。
    image140.png
    image245.png
  8. 將本地倉儲的變更 push 到遠端倉儲,以上為衝突發生時的處理流程。
    image250.png
    image252.png

本文完。有很多情況下沒辦法使用 GUI 介面,可到參考資料1, 參考資料2, 參考資料3,這三篇文章涵蓋了幾乎所有新手會遇到的問題!

參考資料:

  1. Git 教學(1) : Git 的基本使用 @ 好麻煩部落格
    http://gogojimmy.net/2012/01/17/how-to-use-git-1-git-basic/
  2. Git 教學(2):Git Branch 的操作與基本工作流程 @ 好麻煩部落格
    http://blog.gogojimmy.net/2012/01/21/how-to-use-git-2-basic-usage-and-worflow/
  3. Git 情境劇 @ 好麻煩部落格
    http://blog.gogojimmy.net/2012/02/29/git-scenario/
  4. Git GUI – (1) TortoiseGit, msysgit 安裝 @ 蛙齋
    http://wazai.net/2563/git-gui-1-tortoisegit-msysgit-安裝
  5. Git GUI – (2) 設定、Clone、Add、Modify @ 蛙齋
    http://wazai.net/2569/git-gui-2-設定、clone、add、modify
  6. Git GUI – (3) branch、conflict、merge @ 蛙齋
    http://wazai.net/2734/git-gui-3-branch、conflict、merge
  7. Git GUI – (4) fetch、merge、pull、解決衝突情況(conflict) @ 蛙齋
    http://wazai.net/2737/git-gui-4-fetch、merge、pull、解決衝突情況conflict
相關文章

Git GUI – (3) branch、conflict、merge

接續上篇文章 Git GUI - (2) 設定、Clone、Add、
2013-03-18 18:22:03
hans

18

Git GUI – (2) 設定、Clone、Add、Modify

依照上一篇文章 Git GUI - (1) TortoiseG
2013-03-18 18:21:24
hans

18

Git GUI – (1) TortoiseGit, msysgit 安裝

Git 是一個分散式版本控管的好工具(維基百科的 Git 介紹),這邊從簡單、有圖形化界面的開始吧!注意:小蛙也還
2013-03-18 18:20:10
hans

18

SSL For Free – 免費又有綠色鎖頭的 SSL Certificates

之前聽說 Google 會優先搜尋有 https 的網頁 (參考:
2016-07-07 23:00:54
hans

8

Android Vuforia with jPCT-AE (5) – 多重模型載入,以 obj 為例

要進到這系列最後一篇文章了,這篇文章拖了很久,一直沒有時間整理,結果到最後 ... 程式碼留下來了,記憶卻有些模糊了,這邊小蛙配著程式碼盡可能的把還記得的東西寫下來。
2016-07-06 11:24:19
hans

8

Android Vuforia with jPCT-AE (4) – 載入 3DS 測試

延續 jPCT-AE Loader 載入模型的部份,這篇要記錄載入 3ds 檔案格式的方法,基本上跟前面幾個 obj, md2 的方法差不多,只有一些小小的變化而已。
2016-07-06 10:24:33
hans

8

Android Vuforia with jPCT-AE (3) – 載入 md2 測試

前兩篇介紹如何直接透過 jPCT-AE 直接繪圖以及載入 .obj 檔案,這邊繼續介紹 jPCT-AE 載入 md2 的方法,載入動作大致上類似,唯一不同的只有 texture 設定部份。
2016-07-06 09:24:43
hans

8

Android Vuforia with jPCT-AE (2) – 載入 obj 測試

上一篇 Android Vuforia with jPCT-AE (1) –
2016-07-06 08:24:55
hans

8

Android Vuforia with jPCT-AE (1) – 基本範例

說來慚愧,從 Google Adsense 被 ban 之後,就好久沒有發文了,站上 Vuforia 的文章也已經是好久以前的事情了 (遠目),最近有專案要用到 Vuforia,爬以前的文回來看,蛙哩咧 ... 現在已經更新到 Vu
2016-07-06 07:57:58
hans

8




 回覆

你可以使用以下語法 HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="">

(required)

(required)

   
© 2012 蛙齋 Suffusion theme by Sayontan Sinha