4. 分支 Branch
在前面的章節中,我們學會了建立專案、在本地與雲端同步檔案,甚至是不小心推錯檔時的緊急救援。但你有沒有發現,到目前為止,我們所有人都是擠在一條叫做 main 的直線上開發?
想像一下這個恐怖情境:你正在 main 上修改新功能,程式碼改到一半、滿地 Bug。這時老闆突然打來說:「網站的登入功能壞了,限你 10 分鐘內修好上線!」
此時的你進退兩難:
- 把手邊改到一半、壞掉的程式碼硬著頭皮 Commit 並推上去?(網站會直接全站炸開)
- 狂按 Ctrl + Z 把新功能全刪掉,先修 Bug?(這幾天的努力全白費)
如果你懂得使用 Branch(分支),那面對這種情境時,你自然能從容應對了。
1. 什麼是 Branch(分支)?
簡單來說,分支就是程式碼的「平行宇宙」。
在 Git 的世界裡,預設的主線宇宙叫做 main(舊版叫 master),這條主線通常用來存放隨時可以穩定執行、要給客戶看的正式版程式碼。
當你想開發新功能(Feature)或修復 Bug 時,你不需要也不應該直接在 main 上面動刀。你可以從 main 拉出一個平行宇宙(建立新分支),在這個宇宙裡,你愛怎麼改就怎麼改,就算改到全面崩潰,main 宇宙裡的正式網站依然完好無損、安全運作。
等你在平行宇宙把新功能測試完美了,再把這條分支「合併 (Merge)」回 main 宇宙。這就是現代軟體開發的核心心法。
gitGraph
commit id: "初始專案"
commit id: "網頁首頁完成"
branch feature/cool-ui
checkout feature/cool-ui
commit id: "切換宇宙:開發新 UI"
commit id: "新 UI 測試成功"
checkout main
commit id: "主線宇宙:緊急修復登入 Bug"
merge feature/cool-ui
commit id: "完美合併!"從上圖可以看到,當主線在修復緊急 Bug 的同時,你的 feature/cool-ui 平行宇宙正在同步開發新功能,兩者互不干涉,最後再完美交織在一起!
2. 實戰 !
現在,請打開你的終端機,切換到你的專案資料夾,我們一起來操縱時空裂縫。
1. 檢查目前有哪些分支
git branch
- 💡 終端機提示: 你會看到畫面上出現
* main,有米字號*的代表你目前正身處在這個宇宙。
2. 建立並直接切換
我們現在要開發一個購物車功能,輸入以下指令:
git checkout -b feature/cart
- 💡 指令解析:
checkout是切換宇宙的意思,加上-b代表「如果這個分支不存在,就幫我新建一個」。 - 這時候再次輸入
git branch,你會發現*已經移到feature/cart上了!
3. 在平行宇宙中安心開發
我們在購物車宇宙裡新建一個檔案,並做好 Commit:
echo "Cart function is under development..." > cart.html
git add .
git commit -m "feat: Add basic cart structure"
Code language: PHP (php)
此時,這個 cart.html 只存在於 feature/cart 分支。
4. 切回主線宇宙
我們切換回 main 看看:
git checkout main
這時候神奇的事情發生了,請檢查你的專案資料夾,你會發現剛剛寫的 cart.html 竟然不見了! 別慌,它沒有不見,它只是留在購物車宇宙裡,而你現在回到了乾淨的正式版主線。
5. 合併分支
假設購物車功能在平行宇宙已經測試通過,我們要把它接回主線:
務必確認你目前身處在 main 分支,然後輸入:
git merge feature/cart
畫面上會出現 Fast-forward,代表主線已經成功把購物車分支的進度吞進來了!這時候 cart.html 就會好端端地出現在你的 main 分支裡。
6. 把新分支也推上 GitHub 備份
如果你在平行宇宙寫到一半要下班了,想把這個分支也推上 GitHub 備份,只要輸入:
git push origin feature/cart
這樣一來,GitHub 雲端上就會同步出現這條新分支,團隊夥伴也能拉下來一起開發!
3. 刪除分支
在 Git 的世界裡,刪除分支是一門大學問。我們通常會分為「刪除本地分支」與「刪除 GitHub 上的遠端分支」。
1. 如何把不要的分支刪掉?
請先確保你已經切換到其他分支(例如 main),因為你不能在一個正踩在腳底下的宇宙裡把自己毀滅。
# 站在 main 分支,先確保自己換位置了
git checkout main
Code language: PHP (php)
只刪除「本地電腦」的分支
如果功能已經合併完畢,想把本地的 feature/cart 刪掉:
git branch -d feature/cart
如果這個分支的修改「還沒被合併」,Git 會貼心地擋下你並報錯。如果你確定這個分支是垃圾、真的不要了,可以用大寫的
-D暴力強制刪除:git branch -D feature/cart。
刪除「GitHub 雲端」的遠端分支
如果你之前輸入過 git push origin feature/cart,現在想把 GitHub 上的這條分支抹除:
git push origin --delete feature/cart
Code language: JavaScript (javascript)
這行指令的意思是:「推一個『刪除命令』到遠端(origin),把 feature/cart 給砍了。」
2. 刪除分支,紀錄會跟著不見嗎?修改會不見嗎?
只要你合併(Merge)過了,檔案和紀錄就絕不會不見!
這聽起來很違反直覺,但理解了 Git 的底層邏輯後,你會發現它非常安全:
- 分支其實只是「貼紙(指標)」:你在分支裡每一次輸入
git commit所建立的時光紀錄點(Commit),才是真正存放程式碼修改的實體硬碟空間。而分支名稱(例如feature/cart)只是貼在最新那顆 Commit 上的一張「便條紙」。 - 刪除分支的本質:你只是把
feature/cart這張便條紙撕掉丟進垃圾桶,並不是去刪除那些 Commit 紀錄點。
只要在刪除分支前,確認有做好
git merge,你就儘管放心地把分支砍掉吧!你的程式碼修改與歷史提交紀錄,都會完美、一字不漏地保留在主線上。
