VS Code 中的 Git 分支與工作樹

Git 分支讓您可以同時進行不同的功能開發或實驗,而不會影響您的主要程式碼基底。VS Code 提供用於分支管理的工具、用於平行開發的 Git 工作樹,以及用於暫時變更的儲藏管理。

本文介紹如何在 VS Code 中使用分支、工作樹和儲藏來管理平行開發工作。

使用分支

分支是 Git 歷史記錄中指向特定提交的輕量級可移動指標。它們允許您從主要的開發主線分開,並獨立進行功能開發。

例如,假設您正在開發一個網頁應用程式,需要新增使用者驗證功能,同時還要修復支付系統中的錯誤。您可以建立兩個分支

  • feature/user-authentication - 包含您的登入和註冊功能
  • bugfix/payment-validation - 包含支付處理錯誤的修復

每個分支都維護自己的變更集,互不影響。您可以在不同分支之間切換以處理不同的任務,並在稍後將完成的分支合併回您的主分支。

檢視目前的分支

目前的分支會顯示在 VS Code 中的多個位置

  • 狀態列:顯示目前的分支名稱,並允許快速切換分支
  • 儲存庫檢視:在儲存庫標頭中顯示目前的分支
  • 原始檔控制圖:以視覺化方式呈現分支關係與歷史記錄

Screenshot showing the current branch displayed in the Status Bar and Source Control view.

切換分支

在 Git 術語中,切換到不同的分支稱為「簽出」分支。當您簽出某個分支時,Git 會更新您的工作目錄以符合該分支的狀態。

若要切換到不同的分支

  1. 在狀態列中選取分支名稱,或從指令選擇區執行 Git: Checkout to 指令 (⇧⌘P (Windows、Linux Ctrl+Shift+P))。

  2. 從可用分支清單中選擇

    • 本機分支:存在於您本機電腦上的分支
    • 遠端分支:您可以從遠端儲存庫簽出至本機的分支
    • 最近的分支:最近使用的分支
提示

如果您在切換分支時有未提交的變更,Git 可能會阻止切換以避免遺失工作。在切換之前,請考慮提交您的變更或使用 stash

建立新分支

建立新分支以開始進行功能開發或實驗

  1. 選取狀態列中的分支名稱,或從指令選擇區執行 Git: Create Branch

  2. 輸入新分支的名稱。請使用具描述性的名稱,例如 feature/user-authenticationbugfix/login-error

    提示

    VS Code 可以為您產生隨機的分支名稱。您可以使用 git.branchRandomName.enable 在 VS Code 中開啟 在 VS Code Insiders 中開啟 git.branchRandomName.dictionary 在 VS Code 中開啟 在 VS Code Insiders 中開啟 設定來進行設定。

  3. 選擇要從中建立新分支的來源分支(通常是 maindevelop)。

Screenshot showing the create branch dialog with branch name input and source branch selection.

建立完成後,VS Code 會切換到新分支。

提示

如果您使用 GitHub Pull Requests and Issues 擴充功能,您可以直接從 GitHub Issues 建立分支,這能讓您開始在新本機分支中工作,並自動為您預先填入 pull request。

重新命名與刪除分支

若要重新命名目前的分支

  1. 從指令選擇區執行 Git: Rename Branch,或從更多動作 (...) 功能表中選取它。
  2. 輸入新的分支名稱。

若要刪除分支

  1. 切換到不同的分支(您無法刪除目前使用中的分支)。
  2. 從指令選擇區執行 Git: Delete Branch,或從更多動作 (...) 功能表中選取它。
  3. 從清單中選取要刪除的分支。

您也可以使用對應的 Delete Remote Branch 動作來刪除遠端分支。

注意

刪除分支會將其從您的本機儲存庫中永久移除。請確定該分支已合併,或者您不再需要這些變更。

合併與發布分支

當您的功能完成後,將其合併回主分支

  1. 切換至目標分支(通常是 maindevelop)。
  2. 從指令選擇區執行 Git: Merge Branch
  3. 選取要合併的分支。

若要將分支發布到您的遠端儲存庫,請使用 Publish Branch 動作。

VS Code 會在「原始檔控制」檢視中顯示合併結果。如果有衝突,VS Code 會反白顯示這些衝突並提供解決工具。深入了解 解決合併衝突

使用 Git 工作樹

VS Code 內建支援 Git worktrees,讓您可以輕鬆地同時管理和處理多個分支。

了解工作樹

工作樹是 Git 分支在其專屬目錄中的獨立簽出。這允許您為同一個儲存庫擁有多個工作目錄,每個目錄位於不同的分支上。工作樹功能特別適用於

  • 在不同的資料夾中同時進行多個功能的開發
  • 並排執行應用程式的不同版本
  • 跨分支比較實作方式

建立工作樹

若要在 VS Code 中建立新的工作樹

  1. 從「原始檔控制」檢視中開啟原始檔控制儲存庫檢視。

    Screenshot showing the Source Control Repositories view with multiple repositories listed.

  2. 選取您的儲存庫,開啟更多動作 (...) 功能表,然後選擇工作樹 > 建立工作樹

    Screenshot showing the worktree context menu in the Source Control Repositories view.

  3. 依照提示選擇新工作樹的分支與位置。

    VS Code 會在指定位置為工作樹建立新資料夾,並將選定的分支簽出到該資料夾中。

新工作樹會以獨立項目形式顯示在原始檔控制儲存庫檢視中。

建立工作樹時包含檔案

當您建立工作樹時,Git 不會複製被 .gitignore 排除的檔案,例如本機組態檔、環境檔案或已安裝的相依性。若要在新工作樹中工作,您可能需要這些檔案存在。

使用 git.worktreeIncludeFiles 在 VS Code 中開啟 在 VS Code Insiders 中開啟 設定來設定要複製到新工作樹中的檔案與資料夾的 glob 模式。只有當檔案符合其中一種模式且同時列在 .gitignore 中時,才會被複製。

常見的用途是將 node_modules 資料夾複製到每個新工作樹中。這樣一來,您就可以立即開始工作,而不必重新安裝相依性。例如,設定以下設定以同時複製本機 .env 檔案

"git.worktreeIncludeFiles": [
    ".env",
    "node_modules/**"
]

切換工作樹

VS Code 可以同時顯示多個儲存庫(包含工作樹)

  • 每個工作樹都會在原始檔控制儲存庫檢視中顯示為獨立的儲存庫
  • 您可以開啟多個 VS Code 視窗,每一個視窗指向不同的工作樹
  • 使用檔案 > 開啟最近的檔案來快速切換工作樹目錄

開啟工作樹

有幾種不同的方式可以開啟工作樹

  • 直接在 VS Code 中開啟與工作樹相關聯的資料夾。VS Code 會自動偵測它是現有儲存庫的工作樹。

  • 在「原始檔控制儲存庫」檢視中按一下滑鼠右鍵並選取在新視窗中開啟工作樹在目前視窗中開啟工作樹

  • 在指令選擇區中執行 Git: Open Worktree in Current WindowGit: Open Worktree in New Window 指令,然後選取所需的工作樹。

自動偵測工作樹

根據預設,VS Code 會列出您從原始檔控制儲存庫檢視建立的工作樹。若要同時自動偵測儲存庫中已存在的工作樹,請啟用 git.detectWorktrees 在 VS Code 中開啟 在 VS Code Insiders 中開啟 設定。啟用此設定後,VS Code 會掃描儲存庫中的工作樹並將其顯示在原始檔控制儲存庫檢視中。

為避免掃描大量的工作樹,VS Code 限制了偵測到的工作樹數量。使用 git.detectWorktreesLimit 在 VS Code 中開啟 在 VS Code Insiders 中開啟 設定來變更此限制。預設值為 50。

比較與移轉來自工作樹的變更

當您在工作樹中進行變更時,您可以將這些變更與您的主要工作區進行比較,並將工作樹的變更帶回您的主要儲存庫。

  1. 在「原始檔控制」檢視中,在工作樹中已變更的檔案上按一下滑鼠右鍵,然後選取與工作區比較以並排檢視差異。

    Screenshot showing the compare with workspace option in the worktree context menu and side-by-side diff view.

  2. 檢閱後,從指令選擇區使用 Migrate Worktree Changes 指令,將工作樹中的所有變更合併到您目前的工作區中。

後續步驟

English 한국어 中文(简体) 中文(繁體)
© . This website operates independently and is not affiliated with or endorsed by Microsoft. All brand names, logos, and trademarks are the property of their respective owners.