GitHub: the merge waits for conversations to be resolved
A branch protection rule or a ruleset can require conversation resolution before merging. Then all comments on the pull request must be resolved before it can be merged into the branch, so that all comments are addressed or acknowledged before the merge (GitHub's about protected branches and available rules for rulesets). The REST reference words the ruleset setting as "All conversations on code must be resolved before a pull request can be merged." Until then the REST mergeable_state of the pull request is blocked, and GraphQL's mergeStateStatus is BLOCKED (checked October 26, 2026).
GET /repos/OWNER/REPO/rules/branches/BRANCH → rule "pull_request": parameters.required_review_thread_resolution
GET /repos/OWNER/REPO/branches/BRANCH/protection → required_conversation_resolution.enabled
POST /graphql pullRequest(number: N) { reviewThreads(first: 100) { nodes { isResolved isOutdated viewerCanResolve path line } } }
Which conversations count
- Conversations on code: the ones that can be resolved are the threads on the Files changed tab, which start from a comment on the changed code; "Resolve conversation" collapses the whole thread and marks it resolved (GitHub's commenting on a pull request). The API calls them review threads, each with
isResolved. - Outdated ones too: a conversation can be outdated by newer changes and still not resolved: the API reports
isOutdatedandisResolvedseparately. The Conversations menu on the Files changed tab lists unresolved, resolved and outdated conversations, which makes the open ones easy to find (see why a comment is outdated). - Where the rule is: in a branch protection rule, "Require conversation resolution before merging"; in a ruleset, the pull request rule's
required_review_thread_resolution, which "Get rules for a branch" returns among the active rules for the branch. Several rulesets can apply to one branch at once.
Who can resolve a conversation
- The author or a writer: you can resolve a conversation if you opened the pull request or if you have write access to the repository. Others, including the reviewer who started it without write access, cannot; GraphQL's
viewerCanResolvesays whether you can. - Through the API: GraphQL's
resolveReviewThreadandunresolveReviewThreadtake the thread's node id. A workflow's or app's token needs more than pull requests permission for them (see why a conversation was not resolved). - Admins: by default the restrictions of a branch protection rule do not apply to people with admin permissions or roles with the "bypass branch protections" permission, unless "Do not allow bypassing the above settings" is on; they can merge while others wait.
What to do
- Find the open ones: on the Files changed tab, open the Conversations menu, or list the review threads through GraphQL and keep those with
isResolvedfalse. - Answer, then resolve: address each comment, or reply to it, and resolve it as the author or someone with write access. A conversation that is out of the pull request's scope can become a new issue linked back to the comment, and then be resolved.
- Ask the one who can: if you can neither resolve it nor bypass the rule, ask the pull request's author or a maintainer with write access.
- Check the other rules: resolution is one requirement among others: approving reviews (see a code owner's review and why an approval does not count), required checks (see a required check stuck at "Expected"), a branch that must be up to date.
In IntelliJ IDEA: the threads are read, the rule is not
How the GitHub support built into IntelliJ IDEA deals with resolving conversations, in its source (checked October 31, 2026; IntelliJ IDEA: refUpdateRule.graphql, pullRequestReviewThreads.graphql, pullRequestReviewThread.graphql, GHPRTimelineThreadViewModel.kt, GHPRReviewServiceImpl.kt, GraphQL files):
- Not the rule: none of its 78 GraphQL files asks whether the branch requires conversations to be resolved (
requiresConversationResolutionin branch protection,requiredReviewThreadResolutionin a pull request rule), and the rule it reads for the base branch has neither. - The threads: it asks for the pull request's review threads, 100 at a time. For each one it asks whether it is resolved or outdated, its file and lines, up to 100 comments, and whether your account can reply, resolve or unresolve it.
- Resolving: in its timeline thread code, whether the state can be changed comes from GitHub's answer on whether your account can resolve or unresolve that thread, and a change is sent as GitHub's
resolveReviewThreadorunresolveReviewThread.
GitHub pull requests in IntelliJ IDEA
Pull Request Inbox for GitHub, a plugin by Lesstep for JetBrains IDEs 2024.1 or later, shows the conversations on the diff, marks the resolved ones with who resolved them, and offers Resolve and Unresolve; it reads the threads through GraphQL with your token. When GitHub calls the pull request blocked, its merge checks say the rules of the target branch are not met yet (required reviews or required checks). When a blocked pull request has conversations on code that are not resolved, they are counted there, and said to hold the merge back when the target branch's ruleset or protection requires them resolved; when those rules cannot be read, as what may hold it back. The review inbox, diffs and conversations are free; approving, commenting, resolving and merging are Pro (US$1.50 a month, with a 30-day trial).
GitHub is a trademark of GitHub, Inc.; IntelliJ IDEA is a trademark of JetBrains s.r.o. This page is not affiliated with or endorsed by GitHub, Inc. or JetBrains.
More: GitHub merge refused (405, 409) · GitHub review refused (422) · GitHub search 422 "Validation Failed" · "Resource not accessible by personal access token" · 401 "Bad credentials" · "Resource protected by organization SAML enforcement" · "API rate limit exceeded" · GitHub diff 406 "too_large", 3,000 files · GitHub line comment 422 "must be part of the diff" · GitHub branch update refused (422) · GitHub pull request not created (422, 403) · GitHub auto-merge refused · GitHub draft, ready for review or close refused · GitHub conversation not resolved · GitHub checks not shown (check runs 403) · GitHub file contents not read · GitHub compare refused (404, 422) · GitHub comment or reply refused (403 locked, archived) · GitHub merge method not allowed (405) · GitHub branch not found (404, 301) · GitHub Enterprise Server not reached · GitHub review request not shown · GitHub pull request list incomplete · GitHub 404 Not Found, renamed repositories (301, 307) · GitHub line comment outdated or not on the diff · GitHub pull requests not updating, notifications late · GitHub suggested change cannot be applied · GitHub required check stuck at "Expected" · GitHub code owner review required · GitHub merge blocked by unsigned commits · GitHub branch that merges through a merge queue · GitHub merge waiting for an approval of the most recent push · GitHub merge waiting for code scanning results · GitHub merge waiting for code quality results · GitHub merge blocked by a code coverage threshold · GitHub merge blocked by license compliance results · GitHub branch locked or its updates restricted · GitHub branch not deleted after merging · GitHub merge waiting for a team's approval (Required reviewers) · GitHub merge blocked by secret scanning alerts · GitHub stacked pull request not merging · GitHub push blocked by push rules · GitHub merge blocked by commit metadata rules · GitHub force push blocked · GitHub issue not closed by a merged pull request · GitHub pull request not checked out locally · GitHub pull request has merge conflicts · GitHub changes requested and dismissing a review · GitHub co-author not credited for a commit · GitHub dependency review check failed · GitHub Dependabot not rebasing its pull request · GitHub fork not syncing with upstream · GitHub pull request base branch not changing · GitHub pull request not reverting · GitHub pull request template not showing · GitHub pull request labels or assignees not added · GitHub pull request not closing or reopening · GitHub push blocked by push protection · GitHub pull request comment hidden · GitHub pull request blocked until deployments succeed · GitHub team review request replaced by members · GitHub pull request file no longer marked Viewed · GitHub pull request marked merged without being merged · GitHub Copilot review does not count as an approval · GitHub checks not running on a pull request a workflow created · GitHub Update branch button not shown on a pull request · GitHub checks failing on a Dependabot pull request · GitHub checks failing on a pull request from a fork · GitHub checks skipped by [skip ci] in a commit message · GitHub checks gone after the retention period · GitHub code review limits in a public repository · GitHub pull requests turned off or limited in a repository · GitHub checks run on every pull request in a stack · GitHub pull request showing commits already squash merged · GitHub pull request not showing a file diff · GitHub push to a pull request branch from a fork refused · GitHub check cancelled on a pull request · GitHub Rebase and merge not available · GitHub merge commit message not what you expected · GitHub pull request shows every line changed · GitHub API request timed out · GitHub pull request image or document diff not shown · GitHub review request refused (422) · GitHub pull request from Copilot: checks not running, approval not counted · GitHub push refused: GH006 and GH013 on a protected branch · GitHub "At least 1 approving review is required", approvals that do not count · GitHub pull request plugins for IntelliJ IDEA, compared · 日本語