Git 版本控制(進階)

主要內容

  • 什麼是分支(branch)
  • 分支的運用
  • 切換分支(checkout)
  • 合併分支(merge)
  • Git branching model

什麼是分支(branch)?

分支是為了將修改記錄的整體流程分開儲存,互不影響,所以在同一個 repo 裡可以同時進行多個不同分枝的修改。

當多人協作同一專案時,可以在主要分支(一般是 Master 分支)建立自己專用的分支,之後再將自己分支的修改內容導入主要分支中。且每個提交的歷史記錄都會被儲存,後續可以更容易找到問題所在。

Mater 分支:最初的提交後,由 Git 所建立。後續的提交在切換分支前,都會增加在 Master 分支裡。

分支的運用

在此簡介「Integration」和「Topic」兩種分支。

  • Integration 分支
    是穩定、少更改,可隨時建立發布版本的分支,如 master 分支。新分支會建立在它之上。

  • Topic 分支
    為了開發功能、修復錯誤等任務所建立。Topic 分支建立在穩定的 Integration 分支之上,完成修改後,再合併到 Integration 分支。

切換分支(checkout)

Stash

Stash 是暫存檔案修改內容的區域。

還未提交的修改內容留在工作目錄,且已 checkout 到其他分支時,修改內容就會從原來的分支移動到切換後的分支。但是,若想暫存工作目錄未提交的修改,可以將修改內容放到 stash 中暫存再 checkout ,事後再取出應用到任一分支。示意圖如下:(圖片引用自連猴子都能懂的Git入門指南

git_stash

合併分支(merge)

合併分支有 2 種方法:使用「merge」或「rebase」。(以下圖片引用自連猴子都能懂的Git入門指南

  • Merge
    修改內容的歷史記錄會維持原狀,但合併後的歷史紀錄變得複雜。
    git_merge

  • Rebase
    修改內容的歷史記錄會接在要合併的分支後,合併後的歷史記錄相對簡單,但較容易發生衝突。
    git_rebase

Git branching model

「A successful Git branching model」一文建議將分支分為四類,如下:

  • Main:分為 master 和 develop 兩種分支。
    •  Master:管理發布狀態,最後的提交會有發布版本標籤。
    • Develop:日常開發。所有新功能開發最終併回 develop。(似 integration 分支功用)
  • Feature :亦稱 Topic ,新功能開發、修復錯誤時從 develop 分支出來。基本上不需在遠端數據庫建立分支。完成開發後併回 develop 發布。
  • Release:通常分支名前加”release-“ 。即將發布前才建立, 做最後錯誤修復。 到可發布時,將 release 併回 master ,並添加 release 版本號標籤。最好也併回 develop ,確保同步到 release 最新狀態。
  • Hot fix:發布的產品需緊急修改時,從 master 建立的分支。通常分支名前加”hotfix-“。修改後併回 master 及 develop 。

(以下示意圖引用自連猴子都能懂的Git入門指南
git_branching_model

以上是學習的一點紀錄,若想了解 Git 更詳細的內容,可以去看上面連結的教學文喔!