diff --git a/app/graphql/resolvers/merge_requests_resolver.rb b/app/graphql/resolvers/merge_requests_resolver.rb
index ebbb68611b3d0b609fc996b495208c69e214ce86..4823e69803c8dca4ba6565cc4970ec73b37edead 100644
--- a/app/graphql/resolvers/merge_requests_resolver.rb
+++ b/app/graphql/resolvers/merge_requests_resolver.rb
@@ -183,6 +183,13 @@ def self.accept_reviewer
Array of source branch names.
No resolved merge requests will have one of these branches as their source.
DESC
+ argument :target_branches, [GraphQL::Types::String],
+ required: false,
+ as: :target_branch,
+ description: <<~DESC
+ Array of target branch names.
+ No resolved merge requests will have one of these branches as their target.
+ DESC
end
validates mutually_exclusive: [:assignee_username, :assignee_wildcard_id]
diff --git a/doc/api/graphql/reference/index.md b/doc/api/graphql/reference/index.md
index c78bf07dd025ba55f52659e1448ca7399d576022..8d83cd4b0dec0ce36f8f384035804cd11a0c9b80 100644
--- a/doc/api/graphql/reference/index.md
+++ b/doc/api/graphql/reference/index.md
@@ -43020,6 +43020,7 @@ Defines which user roles, users, or groups can merge into a protected branch.
| `releaseTag` | [`String`](#string) | Filter by release tag to exclude. |
| `reviewerUsername` | [`String`](#string) | Username of the reviewer to exclude. |
| `sourceBranches` | [`[String!]`](#string) | Array of source branch names. No resolved merge requests will have one of these branches as their source. |
+| `targetBranches` | [`[String!]`](#string) | Array of target branch names. No resolved merge requests will have one of these branches as their target. |
### `MonthSelectionInput`
diff --git a/spec/graphql/resolvers/merge_requests_resolver_spec.rb b/spec/graphql/resolvers/merge_requests_resolver_spec.rb
index 15f3ca47becd579d307825e3c38cb7b3ea5cf719..826b6b308141c1aeb7ef2bdc5466b178d778cc70 100644
--- a/spec/graphql/resolvers/merge_requests_resolver_spec.rb
+++ b/spec/graphql/resolvers/merge_requests_resolver_spec.rb
@@ -175,6 +175,17 @@
end
end
+ context 'with negated target branches argument' do
+ it 'excludes merge requests with given target branches from selection' do
+ mrs = [merge_request_3, merge_request_4]
+ branches = mrs.map(&:target_branch)
+ result = resolve_mr(project, not: { target_branches: branches })
+
+ expect(result).not_to include(merge_request_3, merge_request_4)
+ expect(result).to include(merge_request_1, merge_request_2, merge_request_5, merge_request_6)
+ end
+ end
+
context 'with state argument' do
it 'takes one argument' do
result = resolve_mr(project, state: 'locked')