diff --git a/app/services/merge_requests/base_service.rb b/app/services/merge_requests/base_service.rb
index 5f00b4d85c6b18b40d7f2f1f1f321050be1757f5..f6cbe88912862354544dd0f40e5880b8d3e7e378 100644
--- a/app/services/merge_requests/base_service.rb
+++ b/app/services/merge_requests/base_service.rb
@@ -94,6 +94,10 @@ def merge_request_activity_counter
 
     private
 
+    def refresh_pipelines_on_merge_requests(merge_request, allow_duplicate: false)
+      create_pipeline_for(merge_request, current_user, async: true, allow_duplicate: allow_duplicate)
+    end
+
     def enqueue_jira_connect_messages_for(merge_request)
       return unless project.jira_subscription_exists?
 
diff --git a/app/services/merge_requests/refresh_service.rb b/app/services/merge_requests/refresh_service.rb
index 533d0052fb88743e1dc779d66071f2c5b74b0f4a..ce49d5dd43caec00fb1e6f7d76bcea9aa8057fbb 100644
--- a/app/services/merge_requests/refresh_service.rb
+++ b/app/services/merge_requests/refresh_service.rb
@@ -162,10 +162,6 @@ def outdate_service
       @outdate_service ||= Suggestions::OutdateService.new
     end
 
-    def refresh_pipelines_on_merge_requests(merge_request)
-      create_pipeline_for(merge_request, current_user, async: true)
-    end
-
     def abort_auto_merges(merge_request)
       abort_auto_merge(merge_request, 'source branch was updated')
     end
diff --git a/app/services/merge_requests/update_service.rb b/app/services/merge_requests/update_service.rb
index 745647b727c0ee5665ae810dce8a8caa2215269d..a273b853c0d271bedad2c9d9fc6267e45c06c6b9 100644
--- a/app/services/merge_requests/update_service.rb
+++ b/app/services/merge_requests/update_service.rb
@@ -169,6 +169,8 @@ def handle_target_branch_change(merge_request)
         merge_request.target_branch
       )
 
+      refresh_pipelines_on_merge_requests(merge_request, allow_duplicate: true)
+
       abort_auto_merge(merge_request, 'target branch was changed')
     end
 
diff --git a/spec/services/merge_requests/update_service_spec.rb b/spec/services/merge_requests/update_service_spec.rb
index 353af5a594aa7b945d04236ccdaa19588b2093af..344d93fc5cab2247e60160264d3a08c409995220 100644
--- a/spec/services/merge_requests/update_service_spec.rb
+++ b/spec/services/merge_requests/update_service_spec.rb
@@ -479,6 +479,16 @@ def update_merge_request(opts)
       end
     end
 
+    shared_examples_for "creates a new pipeline" do
+      it "creates a new pipeline" do
+        expect(MergeRequests::CreatePipelineWorker)
+          .to receive(:perform_async)
+          .with(project.id, user.id, merge_request.id, { "allow_duplicate" => true })
+
+        update_merge_request(target_branch: new_target_branch)
+      end
+    end
+
     shared_examples_for 'correct merge behavior' do
       let(:opts) do
         {
@@ -799,6 +809,10 @@ def update_merge_request(opts)
 
           update_merge_request({ target_branch: "target" })
         end
+
+        it_behaves_like "creates a new pipeline" do
+          let(:new_target_branch) { "target" }
+        end
       end
 
       context 'when auto merge is enabled and target branch changed' do
@@ -813,6 +827,10 @@ def update_merge_request(opts)
 
           update_merge_request({ target_branch: 'target' })
         end
+
+        it_behaves_like "creates a new pipeline" do
+          let(:new_target_branch) { "target" }
+        end
       end
     end
 
@@ -1237,6 +1255,10 @@ def update_merge_request(opts)
         expect { update_merge_request(target_branch: 'master', target_branch_was_deleted: true) }
           .to change { merge_request.reload.target_branch }.from('mr-a').to('master')
       end
+
+      it_behaves_like "creates a new pipeline" do
+        let(:new_target_branch) { "target" }
+      end
     end
 
     it_behaves_like 'issuable record that supports quick actions' do