fix-merge-conflicts | 解決衝突並驗證合併結果
本頁以 pstack-claude 0.9.126 移植版為準。fix-merge-conflicts 不在此次核對的 Cursor 原版 pstack 技能目錄中。本次未操作任何合併或外部 PR。
定位與適用情境
合併衝突 (merge conflict) 不是只刪掉標記。此技能盤點所有衝突,保留合理的雙方變更,再用編譯、靜態檢查與測試確認結果。原文最後一步包含暫存已解決檔案,不包含推送或加標籤。
情境是功能分支增加匯出選項,主分支同時調整同一設定結構與依賴版本。設定檔與套件鎖定檔 (lockfile) 都出現衝突。輸入是已進入衝突狀態的工作目錄與雙方差異,不是授權代理自行發起 rebase。
準備
- 確認目前分支、合併或重定基底 (rebase) 狀態,以及使用者尚未提交的變更。先界定哪些變更不能覆蓋。
- 提供公開行為與相關測試,讓代理判斷兩側意圖。只因某一側能編譯,仍不足以證明應捨棄另一側功能。
- 確認專案套件管理器與版本,以及 compile、lint、test 指令。鎖定檔重建若需要安裝或連網,另行確認權限。
Claude Code 使用 /pstack:fix-merge-conflicts。Codex 插件選單插入 $pstack:fix-merge-conflicts,skills-only 使用 $fix-merge-conflicts。Git 與套件管理器需由實際平台提供,不保證載入技能就具備環境。
操作步驟
- 列出完整衝突清單。 讀取 Git 狀態與衝突標記,確認設定檔、鎖定檔及其他未合併路徑,不只處理目前開啟的檔案。
- 讀懂兩側意圖。 對照設定結構、呼叫端與測試。能安全保留時整合雙方變更。不能同時成立時,選擇能編譯且維持既有公開行為的方案,記錄取捨。遇到無法證實的產品選擇先回報,不盲選 ours 或 theirs。
- 用工具重建鎖定檔。 先解決套件宣告,再依專案管理器重新產生鎖定檔。不要手工拼接依賴解析內容,也不要順便升級無關套件。
- 驗證解決結果。 檢查是否仍有未合併路徑或殘留衝突標記,執行編譯、lint 與相關測試。只清掉標記卻未檢查行為,不能稱為完成驗證。
- 依授權暫存與交接。 原文要求 stage 已解決檔案。僅在獲准後逐檔暫存,避免把使用者其他變更一起加入。列出關鍵選擇與驗證結果,不推送或加 tag。
可直接使用的提示詞
用 pstack:fix-merge-conflicts 處理目前工作目錄既有的衝突。
先回報分支、合併狀態、衝突清單與需要保留的未提交變更。
設定結構要對照雙方意圖和呼叫端,安全時保留兩側功能。
鎖定檔使用專案套件管理器重建,不手工拼接,不升級無關依賴。
需要安裝或連網時先回報。執行可用的編譯、lint 與相關測試。
本輪只允許本地編輯,不 stage、commit、push、tag 或繼續 rebase。
不要改寫歷史、強推、merge PR 或部署。最後列出取捨與未完成檢查。
預期結果與驗收
- 每個原始衝突都有解決決策,設定與依賴解析一致,沒有未合併路徑或實際殘留的衝突標記。
- 報告區分「已編輯」「已驗證」「已暫存」。未取得 stage 授權時,不把本地衝突編輯稱為已完成原文的全部流程。
- 編譯、lint 與測試結果可核對。缺少環境時列出未執行項目,不宣稱可建置。
限制與權限
暫存 (stage) 會修改索引,不等於提交 (commit)。提交不等於推送 (push),更不等於遠端 PR 合併 (merge)。解決衝突也不自動授權 rebase --continue、改寫歷史或強制推送 (force-push)。這些後續動作應分別確認。
原文明確禁止在衝突解決期間 push 或 tag。技能不授權部署、刪除資料、覆蓋使用者變更或用破壞性 Git 指令清場。非互動式處理是執行方式,不代表遇到無法判定的語意衝突時必須猜測。