有一個容易被忽略的現象:PR 不是「測試通過」的瞬間就一定可以合併。最新一次提交可能讓原本的 check 失效,新的 Review comment 可能重新阻擋合併,甚至目標分支剛好多了一個提交,也會讓分支不再符合最新條件。
這正是 GitHub Copilot App Agent Merge 想處理的工作。它不是無條件替你發布程式,而是讓目前工作區的 Agent 持續讀取 Pull Request 狀態,處理阻塞項,並在 GitHub 判定所有合併條件滿足後執行合併。本文會帶你建立一套可控流程:先判斷哪些 PR 適合使用,再處理 Review comments、CI checks,最後設定人工複核與誤合併防範。
GitHub Copilot App Agent Merge 是什麼?
在 GitHub Copilot App 中,Agent Merge 會要求工作區內的 Copilot session 讀取目前 PR,修復阻擋合併的問題,並在 GitHub 允許時完成合併。官方說明指出,這項功能會在背景執行,應用程式重新啟動後仍會持續,而且 PR 合併後會自動停止。(docs.github.com)
它與一般的「請 Agent 修改一段程式」不同:
- 一般 Agent 任務通常完成修改後,等待你檢查與合併。
- Agent Merge 會持續關注 PR 是否仍有阻塞項。
- Agent 可以處理 Review 意見、failing checks,必要時也能根據 PR 狀態繼續提出修改。
- 最終是否真的能合併,仍由分支保護、required reviews、required checks 和其他 merge requirements 決定。
GitHub Copilot App 本身支援從 My work 找到 PR、檢查 Diff、查看 CI 結果、留下 Review,並在同一個應用程式內管理合併流程。(docs.github.com)
哪些 PR 適合啟用 Agent Merge?
不要先問「能不能自動合併」,而要先問「這個 PR 是否具備足夠的可驗證性」。以下四類條件可以作為初步篩選。
較適合:
- 文件、測試、型別、低風險重構等小範圍變更。
- CI 已覆蓋主要路徑,而且 failing checks 能提供清楚錯誤訊息。
- Review 意見具體,例如補測試、修正例外處理或更新 API 呼叫。
- PR 沒有涉及密鑰、權限、付款、部署設定或資料庫結構。
不宜直接交給 Agent Merge:
- 認證、授權、支付、個人資料或 production 部署。
- 測試不足,或 CI 只檢查格式而沒有功能驗證。
- Review comment 含有產品取捨,需要熟悉業務背景的人判斷。
- 目標分支頻繁變動,或經常需要人工解決複雜衝突。
這裡有三個隱性成本。第一,Agent 可能修好表面錯誤,卻改變原本的行為。第二,重跑 CI 會增加等待時間與執行資源。第三,若提示範圍不清楚,可能形成「提交—失敗—再提交」的循環。
啟用前先檢查這 5 件事
第一項:確認 PR 與工作區關聯
在 GitHub Copilot App 的 My work 找到目標 PR,確認工作區使用的是正確分支。不要在另一個 session 中開啟 Agent Merge,否則你可能看到不同的上下文、指令或未同步的提交。
第二項:先閱讀 Diff,而不是只看綠燈
打開 Files changed,檢查修改檔案是否超出預期。若 PR 原本只應修改測試,卻出現設定檔、部署檔或權限相關檔案,先停止,不要啟用 Agent Merge。
第三項:確認 branch protection
目標分支應設定必要的 Pull Request、required reviews、required status checks,以及適合團隊的 conversation resolution 規則。GitHub 的分支保護可以要求審查通過、狀態檢查成功、解決所有討論,或限制誰能推送與合併。(docs.github.com)
第四項:檢查 required checks 是否真的會執行
required check 必須在最新 commit SHA 上成功;舊提交的成功結果不能代替最新提交。若工作流程因路徑條件被跳過,必需檢查可能長時間停留在等待狀態。(docs.github.com)
第五項:寫好停止條件
啟用前先決定:
- Agent 修改超過哪些檔案就停止。
- 連續失敗幾次後改由人工處理。
- 出現權限、密鑰、部署或資料庫變更時立即停止。
- 哪位維護者負責最後一次人工確認。
提醒: Agent Merge 的作用是跟進合併阻塞項,不是替團隊降低審查門檻。分支保護沒有設定好時,自動化只會把不清楚的規則放大。
GitHub Copilot App Agent Merge 怎麼用?
實際操作可以依照以下順序進行:
- 開啟 GitHub Copilot App,在 My work 找到要處理的 Pull Request。
- 先查看 PR 摘要、Files changed、Review activity 與 CI checks。
- 確認 required reviews、branch protection、合併方式與目前權限均符合預期。
- 對明確的 Review comment 使用 Fix,或在 CI 區域使用 Fix failing checks,先讓 Agent 處理單一阻塞項。
- 等待 Agent 建立新提交,重新查看 Diff,確認沒有產生不相關修改。
- 重新執行或等待 CI checks,確認結果對應最新提交,而不是舊版本。
- 再回到 PR 頂部啟用 Agent Merge,確認目前工作區與目標 PR 正確。
- 啟用後觀察 session 狀態、最新提交、Review 狀態與合併條件;若出現異常,立即停止 Agent。
- 合併前再做一次人工 Diff 檢查,尤其是設定檔、測試刪除、錯誤處理與權限邏輯。
GitHub 官方流程也說明,開啟 PR 後可以在 Review comments 使用 Fix,在 CI 區域使用 Fix failing checks,再由 Agent session 進行後續處理。(docs.github.com)
如何讓 Agent 處理 Review 意見與 failing checks?
Review comments:把意見改寫成可驗證任務
不要只輸入「請處理這個 comment」。較好的提示應包含:
- 要修正的檔案或函式。
- Review 意見實際要求。
- 不可改動的範圍。
- 必須新增或執行的測試。
- 完成後應看到的結果。
例如:
「只修改
src/auth內與這則 Review comment 相關的檔案,保留現有錯誤碼,補一個失敗情境測試,完成後執行該模組測試,不要調整 API 介面。」
Failing checks:先辨識失敗類型
Copilot 怎麼修復 failing checks? 關鍵不在於把錯誤日誌整段貼給 Agent,而是先區分:
- 編譯或型別錯誤:通常適合小範圍修復。
- 單元測試失敗:要確認是程式錯誤、測試假設過時,還是環境差異。
- 依賴或鎖定檔錯誤:必須注意是否引入不必要升級。
- 權限、密鑰或部署檢查失敗:不宜讓 Agent 自行猜測。
- CI timeout:先確認是資源不足、測試卡住,還是程式真的變慢。
GitHub 的 status checks 可能顯示 queued、in progress、pending、waiting、failure 或 success;failure、timeout、action required 通常需要人工查看詳細原因,不能單憑狀態文字要求 Agent 反覆重試。(docs.github.com)
中部決策表:不同 PR 應否使用 Agent Merge
| PR 類型 | CI 完整度 | Review 狀態 | 建議做法 | 風險控制 |
|---|---|---|---|---|
| 文件、測試、格式修正 | 高 | 意見具體 | 可啟用 | 限制檔案範圍,保留人工抽查 |
| 一般功能小改動 | 中至高 | 至少一人審查 | 先 Fix,再評估啟用 | 要求最新提交重新跑 CI |
| 依賴升級、建置設定 | 中 | 可能有取捨 | 不建議直接啟用 | 先人工確認版本與變更範圍 |
| 認證、付款、權限 | 低至中 | 需要資深審查 | 不使用自動合併 | 人工測試、人工合併 |
| Production 部署或資料庫變更 | 視團隊而定 | 必須完整審查 | 只讓 Agent 協助排錯 | 保留部署核准與回滾流程 |
Agent Merge 在背景執行時要監控什麼?
背景執行不等於完全不需要查看。建議每次回到工作區時檢查四個信號:
- session 是否仍在執行:應確認 Agent 沒有因權限或環境問題停止。
- 是否產生額外提交:每個新提交都要查看目的與 Diff。
- CI 是否針對最新 SHA 執行:若分支保護要求保持最新,舊 check 不足以解除阻塞。
- 合併條件是否改變:新的 Review、目標分支提交、merge queue 或部署規則,都可能讓 PR 再次被阻擋。
若團隊使用 merge queue,CI 還要處理 merge_group 事件;否則 PR 加入佇列後,必要檢查可能沒有回報,合併會停住。GitHub 文件指出,merge queue 的建置並行數可設定在 1 至 100 之間,實際合併速度會受 CI 資源與規則影響。(docs.github.com)
如何避免錯誤修復、循環提交和意外合併?
可以採用「最小變更、分段驗證、保護合併」三層控制。
最小變更: 一次只處理一個 Review comment 或一組相關 failing checks,不要讓 Agent 同時重構、升級依賴和補測試。
分段驗證: 每次新提交後先查看 Diff,再執行最接近問題的測試,最後才等待完整 CI。若 Agent 連續產生相似提交,應停止並回到錯誤根因。
保護合併: 讓 branch protection 強制 required reviews 與 required checks。需要注意,Copilot 的程式碼審查會留下 Comment review,不會取代必要的 Approve,也不會計入 required approvals。(docs.github.com)
經驗法則: 如果你無法用一句話說明「什麼條件下必須停止」,就不應把這個 PR 交給背景自動流程。
Agent Merge 沒有合併或一直被阻塞怎麼辦?
按照以下順序排查,通常比反覆點 Fix 更快:
- CI 失敗: 打開最新一次 check 的詳細日誌,確認失敗是否發生在最新 commit。
- Review 未通過: 找出尚未解決的 comment,確認是要求修改、詢問原因,還是單純討論。
- 分支過期: 若保護規則要求分支最新,先同步 base branch,再重新跑必要檢查。
- 權限不足: 確認目前帳戶或工作區是否有推送分支、建立提交與合併 PR 的權限。
- 合併衝突: 確認衝突檔案與解決方式;不要讓 Agent 在沒有測試的情況下直接選擇一側內容。
- Merge queue 停住: 檢查 workflow 是否監聽
merge_group,並確認佇列中的合併群組有收到必要檢查。 - 反覆提交: 停止 Agent,保留目前分支,人工比較前後兩次提交,再決定是否重開 session。
GitHub 對 required checks 的要求是以最新提交為準;如果分支保護要求 up to date,必須先把目標分支變更帶入 PR 分支,否則即使先前已通過檢查,也可能不能合併。(docs.github.com)
本站測試 PR 的記錄方式:不要用推測代替實測
本站 PR 案例應只填入實際測試倉庫留下的資料,包括:
- PR 編號與目標分支。
- 啟用前阻塞的 check 名稱與失敗日誌摘要。
- Agent 收到的 Review comment 或 Fix failing checks 指令。
- Agent 新增或修改的提交。
- 重新執行後的 CI 結果。
- 人工複核者確認的檔案範圍與最終結論。
本文不把未提供的 PR 編號、檢查名稱、成功率或節省時間冒充成本站實測。發布前,建議在低風險測試 PR 上完整記錄「阻塞—修復—重跑—人工確認—合併」鏈路,再將真實結果補入案例段落。這樣比宣稱 Agent Merge 一定能節省多少時間更可信,也更方便團隊日後追溯。
若你需要整理 CI、權限或遠端開發環境,可以先參考 ZavCloud 幫助中心 的相關說明。
將 Agent Merge 放進團隊工作流,而不是直接取代維護者
與手動等待 CI、逐條複製 Review 意見、再回到瀏覽器合併相比,Agent Merge 的優勢是能把這些零散步驟放在同一個 PR 工作流中,並在背景持續處理明確阻塞項。但原本的流程通常有三個缺點:需要開發者長時間保持注意力、容易漏看最新提交的狀態,而且在本機環境關閉或連線中斷後,後續追蹤不一定能持續。
如果你的 CI 涉及持續在線的 macOS 或 Xcode 環境,另一個現實問題是本機硬體需要長時間佔用、維護與保持連線。這時可先查看 ZavCloud Mac 雲端租用方案,評估是否把需要長時間執行的建置與測試移到雲端 Mac;但 GitHub 的分支保護、required reviews 與人工複核仍應保留。較穩妥的做法,是先選一個低風險測試 PR,確認 Agent 的啟用入口、停止方式、CI 回報與合併權限都符合團隊預期,再逐步擴大使用範圍。
ZavCloud Developer Infrastructure
讓 PR 自動化流程在專屬遠端 Mac 上穩定運行
ZavCloud 提供獨享 Mac mini M4 雲端主機,適合執行建置、測試及合併前驗證等持續整合工作。
透過 SSH 執行自動化腳本,或使用 VNC 監察圖形介面,方便您掌握背景任務進度與檢查結果。