在 VS Code 中解決合併衝突
當 Git 無法自動合併來自不同分支的變更時,就會發生合併衝突。VS Code 提供了多種工具來協助您高效地識別並解決這些衝突。
了解如何使用內嵌編輯器動作、三向合併編輯器以及 AI 輔助解析,在 Visual Studio Code 中解決合併衝突。
理解合併衝突
當 Git 遇到無法自動解決的競爭性變更時,就會發生合併衝突。常見的情況包括:
- 兩個分支修改了檔案中的同一行程式碼
- 一個分支刪除了另一個分支正在修改的檔案
- 兩個分支在相同位置新增了不同的內容
當您嘗試合併 (merge)、重置 (rebase)、提取 (pull) 或摘錄 (cherry-pick) 包含衝突變更的提交時,Git 會暫停該作業並標記衝突,以便您手動解決。
進一步了解建立和管理分支,以組織您的開發工作並將合併衝突降至最低。
在 VS Code 中識別衝突
當發生合併衝突時,VS Code 會提供多種視覺指標來協助您識別並解決它們。具有衝突的檔案會出現在「原始程式碼控制」檢視的「合併變更」區段中。
編輯器衝突標記
當您開啟包含衝突的檔案時,VS Code 會使用下列標記突顯衝突的部分:
<<<<<<< HEAD(或目前分支名稱):標記您目前分支變更的開始=======:分隔兩個衝突的版本>>>>>>> branch-name:標記傳入分支變更的結束

CodeLens 動作
在每個衝突上方,VS Code 會顯示 CodeLens 動作,讓您快速解決衝突:
- 採納目前變更 (Accept Current Change):僅保留您分支的版本
- 採納傳入變更 (Accept Incoming Change):僅保留傳入分支的版本
- 採納兩者 (Accept Both Changes):保留兩個版本,前後排列
- 比較變更 (Compare Changes):開啟差異檢視,並排檢視差異
使用內嵌動作解決衝突
對於簡單的衝突,您可以直接在編輯器中使用 CodeLens 動作來解決:
-
從「原始程式碼控制」檢視開啟包含衝突的檔案
-
檢視以衝突標記標示的衝突區段
-
選擇衝突上方的其中一個 CodeLens 動作
- 採納目前變更以保留您的版本
- 採納傳入變更以保留傳入的版本
- 採納兩者以保留兩個版本
-
針對檔案中的每個衝突重複上述步驟
-
解決所有衝突後儲存檔案
解決檔案中的衝突後,衝突標記會消失,您可以暫存該檔案,它會移至「原始程式碼控制」檢視中的「暫存變更」區段。接著即可繼續提交變更。
對於需要組合兩者部分內容的更複雜衝突,您可以手動編輯檔案。刪除衝突標記(<<<<<<<、=======、>>>>>>>)並編輯內容以產生所需的結果。
使用三向合併編輯器
對於更複雜的衝突,或者當您想要並排檢視所有變更時,請使用三向合併編輯器。此編輯器提供包含三個面板的完整檢視:
- 傳入 (Incoming)(左側):來自正在合併之分支的變更
- 目前 (Current)(右側):來自您目前分支的變更
- 結果 (Result)(下方):將被儲存的合併結果
開啟合併編輯器
若要開啟三向合併編輯器:
-
在「原始程式碼控制」檢視中選擇包含衝突的檔案
-
從內容選單中選擇在合併編輯器中開啟,或選擇編輯器頂端出現的在合併編輯器中解決按鈕

在合併編輯器中採納變更
合併編輯器會在每個衝突變更旁顯示帶有核取方塊的衝突。使用這些核取方塊來選擇要採納的變更:
-
檢視傳入和目前面板中的變更
-
使用編輯器 CodeLens 動作來選擇要採納的變更
- 採納傳入或目前變更
- 採納兩者的組合,智慧地合併兩項變更
- 忽略變更,使其不包含在結果中
-
底部的結果面板會自動更新以顯示您的選擇
-
使用結果編輯器右側的衝突計數指標,以追蹤剩餘未解決的衝突數量。
-
當所有衝突解決後,選擇完成合併以暫存變更並關閉合併編輯器
在合併編輯器中進行手動編輯
有時您需要組合兩項變更的部分內容或建立全新的解決方案。您可以直接編輯結果面板:
-
在結果面板中的任何位置點選以放置游標
-
視需要編輯內容,合併兩項變更的元素或撰寫新的程式碼
使用傳入或目前面板中的忽略按鈕來隱藏您不想採納的變更。這有助於專注於相關的衝突。
替代佈局
選擇合併編輯器右上角的三個點 (···) 可開啟包含額外選項的內容選單。您可以切換至垂直佈局並顯示基礎檢視,該檢視會顯示任何變更發生前的檔案狀態。
傳入、目前和結果旁邊的三個點為每個檢視提供了選項,例如顯示與基礎版本的並排差異、採納所有變更或重設結果。
使用 AI 解決衝突(實驗性功能)
AI 輔助衝突解決是實驗性功能,需要 GitHub Copilot 訂閱。
VS Code 可以使用 AI 來協助自動解決合併衝突。此功能會分析衝突變更的兩個版本並提出解決方案:
-
在編輯器中開啟包含衝突的檔案
-
選擇編輯器頂端的使用 AI 解決合併衝突按鈕

-
VS Code 會開啟聊天檢視並啟動代理流程來分析衝突
-
檢視編輯器中提出的變更
-
採納解決方案或視需要進行手動調整
AI 會考量合併基礎(兩個分支的共同祖先)以及來自每個分支的變更,以產生試圖保留兩者意圖的解決方案。
完成合併作業
解決所有衝突後,您需要透過提交變更來完成合併作業:
-
確認所有衝突檔案皆已解決,並位於暫存變更區段中
-
輸入提交訊息並選擇提交以完成合併
如果您需要放棄合併作業,請從指令選擇區選擇 Git: Abort Merge (Git:中止合併)。這會將您的儲存庫恢復至合併開始前的狀態。
將 VS Code 設定為預設合併工具
您可以透過在終端機中執行下列指令,將 VS Code 設定為您的預設 Git 合併工具。當您在命令列執行合併導致衝突時,Git 將會開啟 VS Code 的合併編輯器來協助您解決問題。
git config --global merge.tool vscode
git config --global mergetool.vscode.cmd 'code --wait $MERGED'
若要將 VS Code 設定為 Git 的預設差異工具,請執行:
git config --global diff.tool vscode
git config --global difftool.vscode.cmd 'code --wait --diff $LOCAL $REMOTE'
後續步驟
- 分支與工作樹 (Branches and Worktrees) - 了解分支管理以及將衝突降至最低的策略
- 暫存與提交 (Staging and Committing) - 了解如何暫存變更及建立提交
- 儲存庫與遠端 (Repositories and Remotes) - 了解如何使用遠端儲存庫
- 原始程式碼控制總覽 (Source Control Overview) - 探索 VS Code 中的其他 Git 功能
- VS Code 中的 Copilot - 發掘更多 AI 驅動的開發功能