在上一篇文章中,我們了解了 Git 裡 commit 的本質,commit 是「檔案在某時間點的快照」,而所有的 commit 會彼此串接成一條歷史紀錄鏈。
之所以要在前面就介紹 commit 的原理,是因為他與「Branch (分支)」的概念息息相關。開發主線 main
在正式介紹分支前,先來回想一下之前使用 git 的情況~
使用 git 時,應該會注意到專案資料夾旁邊括號寫著 main,如果你用的 git 版本比較舊,可能會看到 master,這其實就是我們現在處在的分支名稱。
在初始化 git 後,git 會自動幫我們建立一個分支,讓我們在上面開發程式,而這第一條分支就是專案的「主要分支」,通常我們會直接叫這條線「main」,或是稱作開發主線。
從 commit 鏈理解 branch
結合前面 commit 的概念,我們說 commit 會一個串著一個:
A ⭠ B ⭠ C ⭠ D
所以我們的 main 會像這樣:
A ⭠ B ⭠ C ⭠ D
↑
main
main 指向這條鏈的最後一個 commit,當你持續 commit 時,其實是,Git 會在目前最後一個 commit (例如 D) 後面接上新的 commit (例如 E),而 main 也會移到新的 commit 上:
A ⭠ B ⭠ C ⭠ D ⭠ E
↑
main
Branch 是什麼
看完了前一節,相信聰明的你一定想到了,所謂的 Branch 就是一個指向某個 commit 的指標。
假設我們已經開發好一支程式,並且已經上線、穩定運作中,現在想要開發新的功能, 為了避免影響到已經上線的功能,我們通常不會直接修改當前的程式,這時候,Git 的 Branch 分支 功能就派上了。
建立分支
假設你現在在 main,想建立一個新分支,可以用這個指令:
git branch <branch_name>
這個指令會讓你在當前的分支上創建一個新的分支,假設想要創建一個叫做 develop 的分支,就用:git branch develop
此時結構變成這樣:
develop
↓
A ⭠ B ⭠ C ⭠ D ⭠ E
↑
main
可以看到 git 多了一個新的指標,也指向 main 本來指向的 commit。也就是說,branch 並不是一份「複製的專案」,而只是「指向某個版本的標籤」。
切換分支
到這個階段我們只是建立好分支,但還停在 main 上。如果想要切換到這個分支,可以用:
git switch <branch_name>
或是比較舊的寫法:
git checkout develop上面這兩個指令都是用來切換分支的。
如果想要建立並立刻切換分支,可以用:
git switch -c develop
切換分支後,可以看到專案後方括號內的字變了。

雖然看到的程式會與之前一樣,但已經進入了另一個開發空間,接下來的 commit 都會發生在當前的分支上。
在分支上開發
當你在 develop 上開發並 commit:
develop
↓
A ⭠ B ⭠ C ⭠ D ⭠ E ⭠ F
↑
main
你會發現 main 完全不會被影響,新的 commit 只存在 develop 分支,就像是平行宇宙一樣!!
為何需要 Branch
Branch 解決了幾個實務上非常重要的問題:
1. 功能開發不互相干擾
有時某功能開發到一半,被迫需要先去修復其他 bug 或完成其他功能,這時候就可以建立不同分支同時進行,完成緊急任務後再切回開發分支繼續進行。
2. 安全測試
在分支上,我們可以放心做嘗試,不論是重構、測新技術、實驗不同的寫法等,完全不用擔心搞壞主線。
3. 多人協作
當多人同時開發專案時,大家可以基於 main 這個穩定版本各自開發新功能而不互相影響,完成功能後再合併回主線。
合併分支(Merge)
當功能完成後,我們會把它合併回主分支:
git checkout main
git merge develop
架構就會變成:
develop
↓
A ⭠ B ⭠ C ⭠ D ⭠ E ⭠ F
↑
main
main 現在也包含了 develop 的 commit,因為 merge 的本質就是把另一條分支的 commit「整合到目前分支後面」。
Branch 的本質
有些新手寶寶會誤會,以為分支是複製一份專案,但其實分支是一個指向 commit 的指標!
可以把分支想像成是貼在 commit 上的貼紙,一條分支就是包含了這張貼紙之前的所有 commit。
所以 git 的分支有兩個很大的優勢:
- 建立 branch 非常快:因為這只是建立一個指標
- 幾乎不占空間:並沒有真的複製整個專案
總結
經過了這篇介紹,我們對 branch 有了基本的認識,branch 也是 Git 最核心的能力之一,讓你可以:
- 同時進行多條開發線
- 讓開發變得安全、不互相干擾
- 讓多人協作變得可行
下一篇文章,我們會進一步討論分支合併的底層邏輯,以及合併的衝突是什麼、怎麼解決。



















