diff --git a/ee/app/services/merge_trains/refresh_merge_request_service.rb b/ee/app/services/merge_trains/refresh_merge_request_service.rb
index 97eabe5f4bf9637b97957628044a0728373678ce..cdd0b885963e13d590854fe904e3d44ace3fee21 100644
--- a/ee/app/services/merge_trains/refresh_merge_request_service.rb
+++ b/ee/app/services/merge_trains/refresh_merge_request_service.rb
@@ -47,8 +47,10 @@ def validate!
     end
 
     def merge_from_train_ref?
-      # For now, we only enable this for fast-forward merge trains
-      return false unless project.merge_requests_ff_only_enabled && Feature.enabled?(:fast_forward_merge_trains_support, project)
+      # Although it should be technically safe to merge from any mergeable train
+      # ref, do so for fast-forward and semi-linear merge trains to avoid
+      # disruption to standard merge commit merge trains.
+      return false unless project.ff_merge_must_be_possible? && Feature.enabled?(:fast_forward_merge_trains_support, project)
 
       mergeable_sha_and_message?(merge_train_car)
     end
diff --git a/ee/spec/services/merge_trains/refresh_merge_request_service_spec.rb b/ee/spec/services/merge_trains/refresh_merge_request_service_spec.rb
index f539ec8f61bc6c1843da2aa07800faf92dcef872..dd3a5bf089e5ccde43888c2bb866a0e4f6de934a 100644
--- a/ee/spec/services/merge_trains/refresh_merge_request_service_spec.rb
+++ b/ee/spec/services/merge_trains/refresh_merge_request_service_spec.rb
@@ -259,9 +259,15 @@
       context 'when the merge request is the first queue' do
         it_behaves_like 'merges the merge request'
 
-        context 'when the merge method is fast forward' do
+        using RSpec::Parameterized::TableSyntax
+
+        where(:merge_method) do
+          [:ff, :rebase_merge]
+        end
+
+        with_them do
           before do
-            project.update!(merge_method: :ff)
+            project.update!(merge_method: merge_method)
             project.repository.raw_repository.write_ref(merge_request.train_ref_path, pipeline.sha)
           end