接續上篇文章 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

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *