在 PR 中回答審查意見
回覆 GitHub PR 上的程式碼審查意見,並解決該討論串。
輸入
從對話上下文推斷所有輸入。只有在不明確時才詢問。
輸入 1 — PR 編號或 URL。 要處理的 pull request。從上下文推斷(例如先前顯示的 PR URL 或分支名稱)。如果確實不明確,請執行:
gh pr list --head "$(git rev-parse --abbrev-ref HEAD)" --json number,url --jq '.[0]'
輸入 2 — 要回答的意見。
特定的審查者發現,通常透過編號(#2)、檔案+行號或對話中先前顯示的意見表格中的引用文字來識別。
如果對話中沒有意見表格,且 dakubo-display-pr-remarks 技能可用,請使用它以顯示表格。如果不可用,請詢問使用者該意見。
輸入 3 — 回答。 要發布的回應:解釋、確認或修復摘要。從上下文推導(例如剛剛修復或討論的內容)。如果不清楚,請詢問。
流程
1. 找出意見的 ID
取得 PR 的內聯審查意見:
gh api repos/:owner/:repo/pulls/<PR>/comments --paginate \
--jq '.[] | {id, path, line: (.line // .original_line), body: .body[0:120]}'
透過行號、檔案路徑或內容片段比對目標意見。記下它的 id。
2. 發布回覆
gh api repos/:owner/:repo/pulls/<PR>/comments \
--method POST \
--field body="<answer>" \
--field in_reply_to=<comment_id>
3. 解決討論串
找到包含此意見的審查討論串:
gh api graphql -f query='
{
repository(owner: "<owner>", name: "<repo>") {
pullRequest(number: <PR>) {
reviewThreads(first: 100) {
nodes {
id
isResolved
comments(first: 1) { nodes { databaseId } }
}
}
}
}
}'
比對 comments.nodes[0].databaseId 等於原始意見 id(而不是回覆)的討論串。然後解決它:
gh api graphql -f query='
mutation {
resolveReviewThread(input: { threadId: "<thread_node_id>" }) {
thread { isResolved }
}
}'
輸出
確認:回覆已發布至意見 <id> 於 <file>:<line>,討論串已解決。一句話。
不該做的事
- 不要憑空編造回答——從上下文推導或詢問。
- 不要在發布回覆之前解決討論串。
- 如果此分支上有多個 PR 處於開啟狀態,不要猜測是哪個 PR;請詢問。