06 - 分支管理(Branch)
← 05-Push與Pull | 下一篇 → 07-常見問題與解法
🌿 什麼是分支(Branch)?
分支讓你可以在不影響主線的情況下,嘗試新功能或修改內容。
main ────●────●────●────●─────
↑ ↑
分支點 合併點
└────●────●─ (feature branch)
使用情境
- 想試試看一個新的寫法,怕改壞主要內容
- 多人協作,每個人在自己的分支工作,完成後再合併
- 同時進行多個不同的功能開發
🔍 查看分支
# 查看所有本地分支(* 表示目前所在的分支)
git branch
# 查看所有分支(包含遠端)
git branch -a➕ 建立新分支
# 建立分支(但不切換過去)
git branch feature/new-notes
# 建立分支並立即切換過去(推薦)
git switch -c feature/new-notes
# 舊版寫法(一樣可以用)
git checkout -b feature/new-notes分支命名建議:
feature/xxx— 新功能fix/xxx— 修正問題docs/xxx— 文件修改
🔀 切換分支
# 切換到指定分支
git switch main
# 舊版寫法
git checkout main
# 切換到上一個分支
git switch -🔗 合併分支(git merge)
當分支上的工作完成了,把它合併回主分支:
# 先切換回 main
git switch main
# 將 feature 分支合併進來
git merge feature/new-notesFast-forward merge vs. Merge commit
# 強制建立 merge commit(有清楚紀錄)
git merge --no-ff feature/new-notes🗑️ 刪除分支
# 刪除已合併的分支(安全)
git branch -d feature/new-notes
# 強制刪除(即使還沒合併)
git branch -D feature/new-notes
# 刪除遠端分支
git push origin --delete feature/new-notes🌍 Push 分支到 GitHub
# 把本地分支推到 GitHub
git push -u origin feature/new-notes🔄 Rebase(進階)
rebase 是另一種整合分支的方式,讓歷史更整潔。
# 在 feature 分支上,把 main 的最新內容接進來
git switch feature/new-notes
git rebase main
mergevsrebase:
merge保留完整歷史,多一個 merge commitrebase讓歷史線性,看起來更乾淨- 初學者先用
merge就好
merge vs rebase 圖解
merge(保留分岔,多一個合併節點):
main ●────●────●────●────●(merge commit)
\ /
feature ●────●──────●
rebase(把 feature 的 commit「搬」到 main 最新點之後,變直線):
main ●────●────●────●────●'────●'────●'
(feature 的 commit 被重放成一直線)
| merge | rebase | |
|---|---|---|
| 歷史長相 | 有分岔、保留真實時間線 | 一條直線、乾淨好讀 |
| 會不會產生新 commit hash | 不會(原 commit 不變) | 會(commit 被重寫,hash 變了) |
| 適合 | 公開 / 多人共用的分支 | 自己本地、還沒分享出去的分支 |
rebase 的黃金守則
永遠不要 rebase 已經 push 出去、別人可能正在用的分支(尤其是
main)。 rebase 會改寫 commit hash,別人的歷史會對不上,造成大亂。 安全範圍:只 rebase「自己本地、還沒分享」的 feature 分支。
📦 git stash:把手上的修改先收進抽屜
情境:你正改到一半(還沒想 commit),但臨時要切去別的分支處理急事。
直接切分支會被擋(怕蓋掉修改),這時用 stash 把工作收起來:
# 把目前所有未 commit 的修改收進暫存抽屜(工作區會變乾淨)
git stash
# 加上說明,之後好認
git stash push -m "寫到一半的 heart failure 筆記"
# 切去做別的事...然後回來,把修改取回
git stash pop # 取回最後一次 stash 並從清單移除
git stash apply # 取回但保留在清單(可重複套用)
# 查看抽屜裡有哪些
git stash list
# 丟掉某一筆
git stash drop stash@{0}
# 全部清空
git stash clear典型用途:pull 前發現有零碎未 commit 的修改擋路 →
git stash→git pull→git stash pop。
🔁 Pull Request(PR)協作流程
在團隊(或你想讓改動被審查)時,不會直接 push 到 main,而是走 PR 流程:
1. 從 main 開一條 feature 分支
git switch -c feature/new-topic
2. 在分支上做修改、commit
git add .
git commit -m "新增某主題筆記"
3. 把分支推上 GitHub
git push -u origin feature/new-topic
4. 上 GitHub 網頁,點 "Compare & pull request" 開一個 PR
- 寫清楚這個 PR 做了什麼
- base:main ← compare:feature/new-topic
5. Review(審查):
- 審查者在 PR 頁面逐行留 comment、要求修改
- 你在本地繼續改 → commit → push,PR 會自動更新
6. 通過後按 "Merge pull request" 合併進 main
7. 合併完刪掉 feature 分支(GitHub 上有按鈕,本地也清掉):
git switch main
git pull
git branch -d feature/new-topic
PR 的好處
- 改動在合併前可被檢視,降低把
main弄壞的風險。- 每個 PR 是一段獨立、可討論、可回溯的紀錄。
- 個人專案也能用 PR 來自我檢查(diff 一目了然)。
📌 小結
| 指令 | 用途 |
|---|---|
git branch | 查看分支 |
git switch -c 分支名 | 建立並切換新分支 |
git switch 分支名 | 切換分支 |
git merge 分支名 | 合併分支 |
git rebase 分支名 | 把目前分支接到指定分支最新點(直線歷史) |
git branch -d 分支名 | 刪除分支 |
git push -u origin 分支名 | Push 分支到 GitHub |
git stash / git stash pop | 暫存 / 取回未 commit 的修改 |
← 05-Push與Pull | 下一篇 → 07-常見問題與解法
