單元 3 · 分支與合併

平行開發、整合與衝突 — Branches & Merge

多人開發不可能都直接改 main。用分支(branch)各自開發,再合併(merge)回主線—— 這是 Git 最重要的設計。

分支是什麼 · Branches

分支是「平行開發的軌道」:每個分支有各自的歷史,互不干擾,最後再合併。

分支示意 · DIAGRAM
main:     o──o──────────o──────o
               \        / 合併
feature:        o──o──o

主線(main)永遠是「穩定可用」;功能在 feature 開發,完成後合併回 main。

分支操作 · Branch Commands

常用指令 · COMMANDS
git branch feature-login      # 建立分支
git checkout feature-login   # 切換到該分支
git checkout -b feature-x     # 建立並切換(最常用)
git branch                  # 列出所有分支
git branch -d feature-x      # 刪除分支
命名慣例:分支名用「斜線語意」:feature/loginfix/typochore/deps——一看就知道這條分支在幹嘛。

合併 · Merge

把某分支的變更併進目前所在分支。

合併流程 · COMMANDS
git checkout main              # 回到主線
git pull                    # 先取得最新
git merge feature-login    # 把功能分支合併進來
git push                    # 上傳合併結果

Pull · 同步他人變更

團隊協作時,動手前先 git pull 拿別人推的新東西。

Pull 的意義 · EXPLAINED
git pull = git fetch + git merge
  fetch:把 GitHub 的資料抓下來
  merge:併入你的目前分支
好習慣:每次開始工作前 git pull,能大幅減少後面的衝突。

衝突 · Conflicts

當兩邊改了同一行程式碼,Git 不知道該留哪邊,就會產生衝突——需要你手動解決

衝突標記 · CONFLICT MARKS
<<<<<<< HEAD          # 目前分支的版本
price = 100
=======                 # 分隔線
price = 120
>>>>>>> feature-x    # 被合併分支的版本

解決步驟:

  1. 打開有衝突的檔案,看到 <<< >>> 標記。
  2. 決定保留哪邊(或兩邊都留),刪掉標記行。
  3. git add 該檔案 → git commit 完成合併。
衝突不是壞事:代表兩個人都改了同一處——「必須人工判斷」是正常的。 維持小 commit、頻繁 pull,衝突就會又少又好解。

合併後上 GitHub · Push

把本地分支推到 GitHub:

推分支 · COMMANDS
git push -u origin feature-login   # 第一次推新分支
git push                           # 之後直接推

推到 GitHub 後,下一步通常就是開一個 Pull Request——下一單元的主題。

看完這頁你應該能說出:
  • 為什麼需要分支、分支的命名慣例。
  • 建立 / 切換 / 合併分支的指令。
  • Pull 的意義與好習慣。
  • 衝突長什麼樣、如何手動解決。

延伸閱讀