diff --git a/app/graphql/types/merge_requests/detailed_merge_status_enum.rb b/app/graphql/types/merge_requests/detailed_merge_status_enum.rb
index ada572f45e820a9ef6b414f9041558168040c431..2d32bbe9148e5d499c85abe1facf854185b5d441 100644
--- a/app/graphql/types/merge_requests/detailed_merge_status_enum.rb
+++ b/app/graphql/types/merge_requests/detailed_merge_status_enum.rb
@@ -54,6 +54,12 @@ class DetailedMergeStatusEnum < BaseEnum
       value 'JIRA_ASSOCIATION',
             value: :jira_association_missing,
             description: 'Either the title or description must reference a Jira issue.'
+      value 'CONFLICT',
+            value: :conflict,
+            description: 'There are conflicts between the source and target branches.'
+      value 'NEED_REBASE',
+            value: :need_rebase,
+            description: 'Merge request needs to be rebased.'
     end
   end
 end
diff --git a/app/services/merge_requests/mergeability/detailed_merge_status_service.rb b/app/services/merge_requests/mergeability/detailed_merge_status_service.rb
index 2e28ffc4363900e360a65541caea8b4056ad80ba..e4444fdaea9e1b3196e8119a8e112d2c85f39a54 100644
--- a/app/services/merge_requests/mergeability/detailed_merge_status_service.rb
+++ b/app/services/merge_requests/mergeability/detailed_merge_status_service.rb
@@ -33,7 +33,7 @@ def execute
       attr_reader :merge_request, :checks, :ci_check
 
       def preparing?
-        merge_request.preparing? && !merge_request.merge_request_diff.persisted?
+        merge_request.preparing?
       end
 
       def checking?
@@ -48,7 +48,7 @@ def check_results
         strong_memoize(:check_results) do
           merge_request
             .execute_merge_checks(
-              MergeRequest.mergeable_state_checks,
+              MergeRequest.all_mergeability_checks,
               params: { skip_ci_check: true }
             )
         end
diff --git a/doc/api/graphql/reference/index.md b/doc/api/graphql/reference/index.md
index 41e227a1c0b2f04783285390011fa61cd7eb3b92..ef7d2e1b27b5cf97da33bd2c626193ab6be20fba 100644
--- a/doc/api/graphql/reference/index.md
+++ b/doc/api/graphql/reference/index.md
@@ -31203,11 +31203,13 @@ Detailed representation of whether a GitLab merge request can be merged.
 | <a id="detailedmergestatusci_must_pass"></a>`CI_MUST_PASS` | Pipeline must succeed before merging. |
 | <a id="detailedmergestatusci_still_running"></a>`CI_STILL_RUNNING` | Pipeline is still running. |
 | <a id="detailedmergestatuscommits_status"></a>`COMMITS_STATUS` | Source branch exists and contains commits. |
+| <a id="detailedmergestatusconflict"></a>`CONFLICT` | There are conflicts between the source and target branches. |
 | <a id="detailedmergestatusdiscussions_not_resolved"></a>`DISCUSSIONS_NOT_RESOLVED` | Discussions must be resolved before merging. |
 | <a id="detailedmergestatusdraft_status"></a>`DRAFT_STATUS` | Merge request must not be draft before merging. |
 | <a id="detailedmergestatusexternal_status_checks"></a>`EXTERNAL_STATUS_CHECKS` | Status checks must pass. |
 | <a id="detailedmergestatusjira_association"></a>`JIRA_ASSOCIATION` | Either the title or description must reference a Jira issue. |
 | <a id="detailedmergestatusmergeable"></a>`MERGEABLE` | Branch can be merged. |
+| <a id="detailedmergestatusneed_rebase"></a>`NEED_REBASE` | Merge request needs to be rebased. |
 | <a id="detailedmergestatusnot_approved"></a>`NOT_APPROVED` | Merge request must be approved before merging. |
 | <a id="detailedmergestatusnot_open"></a>`NOT_OPEN` | Merge request must be open before merging. |
 | <a id="detailedmergestatuspolicies_denied"></a>`POLICIES_DENIED` | There are denied policies for the merge request. |
diff --git a/spec/services/merge_requests/mergeability/detailed_merge_status_service_spec.rb b/spec/services/merge_requests/mergeability/detailed_merge_status_service_spec.rb
index a3c5427ee825a22729eb39be7076ca24c895190e..3d0b341b1faeeb39050c3d5ce7a09a933c819077 100644
--- a/spec/services/merge_requests/mergeability/detailed_merge_status_service_spec.rb
+++ b/spec/services/merge_requests/mergeability/detailed_merge_status_service_spec.rb
@@ -5,6 +5,16 @@
 RSpec.describe ::MergeRequests::Mergeability::DetailedMergeStatusService, feature_category: :code_review_workflow do
   subject(:detailed_merge_status) { described_class.new(merge_request: merge_request).execute }
 
+  let(:merge_request) { create(:merge_request) }
+
+  it 'calls every mergeability check' do
+    expect(merge_request).to receive(:execute_merge_checks)
+      .with(MergeRequest.all_mergeability_checks, any_args)
+      .and_call_original
+
+    detailed_merge_status
+  end
+
   context 'when merge status is cannot_be_merged_rechecking' do
     let(:merge_request) { create(:merge_request, merge_status: :cannot_be_merged_rechecking) }
 
@@ -23,16 +33,6 @@
     end
   end
 
-  context 'when merge status is preparing and merge request diff is persisted' do
-    let(:merge_request) { create(:merge_request, merge_status: :preparing) }
-
-    it 'returns :checking' do
-      allow(merge_request.merge_request_diff).to receive(:persisted?).and_return(true)
-
-      expect(detailed_merge_status).to eq(:mergeable)
-    end
-  end
-
   context 'when merge status is checking' do
     let(:merge_request) { create(:merge_request, merge_status: :checking) }