現已釋出!閱讀關於 11 月新增功能和修復的內容。

在 VS Code 中解決合併衝突

當 Git 無法自動合併不同分支的更改時,會發生合併衝突。VS Code 提供了多種工具來幫助您高效地識別和解決這些衝突。

瞭解如何使用 Visual Studio Code 中的內聯編輯器操作、三方合併編輯器和 AI 輔助解析度來解決合併衝突。

理解合併衝突

當 Git 遇到無法自動解決的競爭性更改時,就會發生合併衝突。常見場景包括:

  • 兩個分支修改了同一檔案的相同行
  • 一個分支刪除了另一個分支修改過的檔案
  • 兩個分支在相同位置添加了不同的內容

當您嘗試合併、變基、拉取或挑選包含衝突更改的提交時,Git 會暫停操作並標記衝突,以便您手動解決。

提示

瞭解更多關於建立和管理分支的資訊,以組織您的開發工作並最大程度地減少合併衝突。

在 VS Code 中識別衝突

當發生合併衝突時,VS Code 會提供多種視覺指示器來幫助您識別和解決它們。有衝突的檔案會顯示在“原始碼管理”檢視的“合併更改”部分下。

編輯器衝突標記

當您開啟包含衝突的檔案時,VS Code 會使用以下標記突出顯示衝突的部分:

  • <<<<<<< HEAD(或當前分支名稱):標記您當前分支更改的開始
  • =======:分隔兩個衝突的版本
  • >>>>>>> branch-name:標記傳入分支更改的結束

Screenshot of inline conflict markers in the editor showing current and incoming changes.

CodeLens 操作

在每個衝突上方,VS Code 會顯示 CodeLens 操作,讓您可以快速解決衝突。

  • 接受當前更改:僅保留您分支的版本
  • 接受傳入更改:僅保留傳入分支的版本
  • 接受兩個更改:同時保留兩個版本,一個接一個
  • 比較更改:開啟差異檢視,並排檢視差異

使用內聯操作解決衝突

對於簡單的衝突,您可以使用 CodeLens 操作直接在編輯器中解決它們。

  1. 從“原始碼管理”檢視開啟包含衝突的檔案

  2. 檢視用衝突標記標出的衝突部分

  3. 選擇衝突上方的 CodeLens 操作之一

    • 選擇“接受當前更改”以保留您的版本
    • 選擇“接受傳入更改”以保留傳入版本
    • 選擇“接受兩個更改”以保留兩個版本
  4. 對檔案中的每個衝突重複此操作

  5. 解決所有衝突後儲存檔案

在檔案中的衝突得到解決後,衝突標記將消失,您可以暫存檔案,它將移動到“原始碼管理”檢視的“已暫存的更改”部分。然後,您可以繼續提交更改。

提示

對於更復雜的衝突,您需要合併兩個更改的部分,您可以手動編輯檔案。刪除衝突標記(<<<<<<<=======>>>>>>>)並編輯內容以建立所需的結果。

使用三方合併編輯器

對於更復雜的衝突,或者當您想要並排檢視所有更改時,請使用三方合併編輯器。此編輯器提供了一個包含三個面板的全面檢視:

  • 傳入(左):來自正在合併的分支的更改
  • 當前(右):來自您當前分支的更改
  • 結果(底部):將要儲存的合併結果

開啟合併編輯器

要開啟三方合併編輯器:

  1. 在“原始碼管理”檢視中選擇一個包含衝突的檔案

  2. 從上下文選單中選擇“在合併編輯器中開啟”,或選擇編輯器頂部出現的“在合併編輯器中解決”按鈕。

    Screenshot of the 3-way merge editor showing incoming, current, and result panels.

在合併編輯器中接受更改

合併編輯器會顯示帶有複選框的衝突,每個衝突旁邊都有一個複選框。使用這些複選框來選擇要接受的更改。

  1. 檢視“傳入”和“當前”面板中的更改

  2. 使用編輯器 CodeLens 操作來選擇要接受的更改

    • 接受“傳入”或“當前”的更改
    • 接受“兩者的組合”更改以智慧合併兩個更改
    • 忽略”更改,將其排除在結果之外
  3. 底部的“結果”面板會自動更新以顯示您的選擇。

  4. 使用結果編輯器右側的衝突計數指示器來跟蹤剩餘未解決衝突的數量。

  5. 當所有衝突都解決後,選擇“完成合並”以暫存更改並關閉合並編輯器。

合併編輯器中的手動編輯

有時您需要合併兩個更改的部分,或者建立一個全新的解決方案。您可以直接編輯“結果”面板。

  1. 選擇“結果”面板中的任意位置以放置游標

  2. 根據需要編輯內容,合併兩個更改的元素或編寫新程式碼

提示

使用“傳入”或“當前”面板中的“忽略”按鈕來隱藏您不想接受的更改。這有助於聚焦於相關的衝突。

備用佈局

選擇合併編輯器右上角的三個點(···)會開啟一個上下文選單,其中包含其他選項。您可以切換到垂直佈局並顯示基礎檢視,它顯示了檔案在任何更改之前的狀態。

傳入”、“當前”和“結果”旁邊的三個點提供了每個檢視的選項,例如顯示與基礎的並排差異、接受所有更改或重置結果。

使用 AI 解決衝突(實驗性功能)

注意

AI 輔助衝突解決是一項實驗性功能,需要 GitHub Copilot 訂閱。

VS Code 可以使用 AI 來幫助自動解決合併衝突。此功能會分析衝突更改的兩個版本,並提出解決方案。

  1. 在編輯器中開啟一個包含衝突的檔案

  2. 選擇編輯器頂部的“使用 AI 解決合併衝突”按鈕

    Screenshot of the AI merge conflict resolution button in the editor.

  3. VS Code 會開啟“聊天”檢視並啟動一個代理流程來分析衝突。

  4. 在編輯器中檢視建議的更改

  5. 接受解決方案或根據需要進行手動調整

AI 會考慮合併基礎(兩個分支的共同祖先)以及每個分支的更改,以生成一個解決方案,該解決方案試圖保留兩個更改的意圖。

完成合並操作

解決所有衝突後,您需要透過提交更改來完成合並操作。

  1. 驗證所有衝突檔案都已解決並位於“已暫存的更改”部分。

  2. 輸入提交訊息並選擇“提交”以完成合並。

提示

如果您需要放棄合併操作,請從命令面板中選擇“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'

後續步驟

© . This site is unofficial and not affiliated with Microsoft.