分支讓您能在同一個專案中平行推進不同的工作線,彼此不互相干擾。本文會帶您認識分支及其用途,學會建立分支、切換分支、整合變更,並透過 IDE 工具從容地解決合併衝突。這些都是理解 Claude Code 如何在獨立分支中操作您的 repository 所需的基礎。

範例與介面截圖以 JetBrains IDE 為準;操作名稱和位置可能因版本而異。練習時請使用獨立的教學用 repository。在工作專案中,請遵循該專案的分支、提交和推送規範。

什麼是分支,為什麼需要分支

分支為一條獨立的 commit 歷史命名。建立分支不會複製專案資料夾,也不會保存尚未 commit 的檔案。在一般工作資料夾中切換分支時,Git 會依照所選分支更新檔案;未完成的變更可能會跟著切換,也可能阻止切換。

上方是 main,下方是 feature/new-idea。合併後,main 指向 M,而 M 有兩個父 commit:E 和 D。ABEMCD
上方是 main,下方是 feature/new-idea。合併後,main 指向 M,而 M 有兩個父 commit:E 和 D。

從主要分支 main 分出新的 feature/new-idea 分支,作為另一條開發線。工作完成後,再把它合併回 main。

假設您想大幅修改專案,或進行有風險的實驗。沒有 Git 的話,您會怎麼做?多半會把整個專案複製到新資料夾,在那裡工作。結果滿意,就把成果移回主要資料夾;不滿意,就刪掉副本。

用副本來比喻有助於理解不同的工作方式,但從技術上說,分支是指向 commit 的指標。用一本書來舉例:

  1. 您手上有一份完成的手稿(也就是主要分支 main);
  2. 您想寫一個不同的結尾(建立新分支,例如 feature/new-idea);
  3. 您在不影響手稿正文的情況下撰寫新結尾(在新分支中工作);
  4. 如果新結尾更好,就用它取代舊結尾(合併分支,也就是 merge);
  5. 不需要的舊草稿可以刪除(刪除分支)。
與 Claude Code 的關聯

請 Claude Code 先顯示分支和目前已有的變更。只有符合專案規範時,才建立獨立分支。已保存的 commits 可作為返回的節點;只刪除分支名稱本身不會撤銷檔案修改,也不會還原先前狀態。

建立新分支並在其中工作

步驟 1. 開啟分支管理選單。

在主工具列上,專案名稱旁邊有個 widget,顯示目前分支的名稱(預設為 main)。點選它,再選擇 + New Branch。

左上角的分支 widget

步驟 2. 為新分支命名。

建議依照要處理的工作為分支命名。例如 feature/add-usage-examples。

建立新分支的視窗

如果建立時選取了 Checkout branch,IDE 就會切換到新分支。編輯檔案前,先在 widget 中確認分支名稱。

步驟 3. 修改並 commit。

在 README.md 中新增一節,放入使用範例。檢視變更後照常建立 commit,新分支的歷史中就會出現保存的快照。

在新分支中建立 commit
與 Claude Code 的關聯

Claude Code 提議建立 commit 時,做的正是這件事:把目前的變更保存成一個日後可返回的節點。答應前請先讀一下 commit 訊息;它會描述變更內容,也很容易修改。

在分支之間切換

附有使用範例的變更已安全地保存到 feature/add-usage-examples 分支。現在切回主要分支 main,看看那邊的狀態。

步驟 1. 再次點選左上角顯示目前分支名稱的 widget。

步驟 2. 在 Local 或 Recent 清單中選擇 main,然後在出現的子選單中點選 Checkout。

切換至 main 分支

步驟 3. 確認結果。

切換完成後,開啟 README.md。您會發現裡面沒有使用範例那一節 - 它還留在另一個分支中。這樣一來,您就能開發新功能,同時不影響 main 分支中的穩定版本。

檔案沒有包含另一個分支的變更

合併分支

merge 會將所選分支的歷史整合到目前分支。如果 main 從分支建立後沒有往前推進,就可能採用 fast-forward:main 會移到 C3,不會建立新的 commit。如果兩條工作線已分岔,一般合併則會建立一個有兩個父 commit 的新 commit。

main 從 C2 移至 C3,不會建立新的 commitC1C2C3
main 從 C2 移至 C3,不會建立新的 commit

在這個線性案例中,main 可以移到 C3。feature/add-usage-examples 也暫時指向 C3;合併時不必刪除這個分支名稱。

假設您已完成 feature/add-usage-examples 分支中的工作,現在想把變更整合到主要專案。

步驟 1. 切換到目標分支。

先確認您目前位於要加入變更的分支,也就是目標分支。本例中是 main。

步驟 2. 執行合併。

再次點選分支管理 widget。在清單中選擇要取出變更的來源分支 feature/add-usage-examples,再於子選單中選擇 Merge 'feature/add-usage-examples' into 'main'。

合併分支

步驟 3. 確認結果。

現在 main 分支中的 README.md 已經有您新增的範例。您成功地把自己的工作整合到專案的主要版本中。

分支已成功合併

合併衝突

衝突表示 Git 無法自動整合變更。常見情況是不同分支修改了同一行;也可能是一個分支刪除了檔案,另一個分支卻修改了它。要採用哪種解法,取決於您希望得到什麼結果。

這時就能看出 IDE(CLion 或 IntelliJ IDEA)內建工具的優勢。在終端機中解決衝突不太輕鬆,但內建的三方合併工具(3-way merge)能讓整個過程清楚又簡單。

兩個分支有共同祖先 C1C1C2C3
兩個分支有共同祖先 C1

兩個分支都從共同祖先 C1 繼續發展。歷史分岔本身不一定會造成衝突;只有 Git 無法自動整合變更時才會發生。以下練習會用不同文字取代同一行原文。

我們來模擬一次衝突:

  1. 確認您位於 main 分支,而且 Commit 視窗中沒有尚未 commit 的變更或新檔案;
  2. 建立新分支 feature/new-title,但先不要切換到該分支。確認未勾選 Checkout branch;
  3. 仍在 main 分支時,把 README.md 的第一行改成 "我的精彩專案",然後建立 commit;
  4. 切換至 feature/new-title。您會看到 README.md 的第一行仍是舊內容 - 這是建立分支當下的檔案狀態。把同一行改成 "我的超級專案",再建立 commit;
  5. 切回 main 分支,並與 feature/new-title 合併。

現在 Git 會發現兩段歷史在同一處都有變更,並顯示衝突處理視窗(Merge Conflicts)。

偵測到衝突的視窗

點選 Merge 按鈕,開啟衝突處理工具。畫面中會看到:

  • 左側 (Your changes) - 目前分支中的檔案版本,也就是您要合併進去的 main;
  • 右側 (Changes from branch) - 您正在合併的來源分支中的檔案版本;
  • 中央 (Result) - 最終檔案版本,需要由您手動整理。
三方合併衝突處理視窗

您可以點選箭頭 >> 或 <<,整段採用其中一種版本;也可以點叉號取消。您也能直接在中央面板輸入正確內容。

確認中央面板中的結果,然後按 Apply 或對應的完成按鈕。接著查看 Git 狀態:如果合併尚未 commit,請透過 IDE 建立 commit。解決衝突行和完成 merge 是兩個不同步驟。最後確認程式碼的行為。

與 Claude Code 的關聯

如果 Claude Code 工作時遇到衝突,這不代表發生故障:Claude 可能會停下來請您協助,也可能提出如何分開處理變更的建議。和一般衝突一樣,您可以用 IDE 的三方合併工具解決。

為什麼有時不會發生衝突

如果練習中沒有出現衝突,請確認第二個分支是從哪個 commit 建立的,以及兩邊是否真的用不同內容取代了同一行。即使歷史已分岔,Git 仍能自動整合相容的修改。另一種情況是線性歷史,此時可能採用 fast-forward:

例如:

  1. main 中有一個 commit(假設是 C1);
  2. 您在 main 分支建立新的 commit,內容是 "我的精彩專案"。此時 main 指向 commit C2;
  3. 您從 main 目前的位置建立 feature/new-title 分支 - 新分支同樣從 commit C2 開始;
  4. 您在 feature/new-title 建立 commit,內容是 "我的超級專案"。這個分支向前推進,指向 commit C3;
  5. 您切回 main(它仍指向 commit C2),並合併 feature/new-title。

Git 發現 main 是 feature/new-title 的直接祖先:您在另一個分支工作期間,main 的歷史沒有新增 commit。因此 Git 只要把 main 的指標直接往前移到 commit C3,不會產生衝突。

main 從 C2 移至 C3,不會建立新的 commitC1C2C3
main 從 C2 移至 C3,不會建立新的 commit

main 的歷史沿著 feature/new-title 繼續前進,沒有分岔。因此 Git 只要把 main 往前移 - 不會有衝突。

查看變更歷史

想更了解專案目前的狀態,不妨查看它的歷史紀錄。

開啟 Git 工具視窗(通常是 IDE 左側邊欄或視窗底部的圖示),再選擇 Git 工具列中的 Log 或 Show Git Log 分頁。您會看到所有分支和 commits 的圖形化呈現,方便追蹤各分支從何處分出,以及在哪裡合併。

Git Log 視窗

點選任一 commit,就能查看它包含哪些變更,以及由誰在何時建立。就像是程式碼的時光機。

與 Claude Code 的關聯

Claude Code 的變更在以一般 commit 保存後,就會出現在這段歷史中。您可以在 Git Log 中和自己的變更一起查看,開啟任何 commit 檢查具體改了什麼。

搭配 Claude Code 時的運作方式

了解分支後,您會更容易看懂 Claude Code 操作 repository 時做了什麼。它會替您運用這項技術處理以下工作,也有幾點值得留意:

  • 如果任務和專案規範允許,就建立獨立分支;
  • 在重要節點提議建立 commit - 您查看 diff,再決定接受或修改;
  • 協助找到需要的已保存 commit,並考量尚未 commit 的變更,選擇合適的還原方式;
  • 合併遇到衝突時,可能會請您協助 - 一樣可以用 IDE 工具解決;
  • 也能準備並評論 pull request(PR,也就是提議把分支合併至主要分支,例如透過 GitHub CLI)。
與 Claude Code 的關聯

答應之前先查看 diff,尤其是 Claude 提議刪除檔案或執行 merge 時。這樣您就能清楚知道哪些內容會進入專案歷史。

上一篇:Git 日常工作流程 · 下一篇:Pull request 從建立到合併