diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb
index d7e7ae7a25fabb4449b0d9bb3fc55e8d9cfe40ed..9be008804387ce9d1de1152bbd2bfe6d7f9b04aa 100644
--- a/app/models/merge_request.rb
+++ b/app/models/merge_request.rb
@@ -293,6 +293,8 @@ class MergeRequest < ActiveRecord::Base
   attr_writer :target_branch_sha, :source_branch_sha
 
   def source_branch_head
+    return unless source_project
+
     source_branch_ref = @source_branch_sha || source_branch
     source_project.repository.commit(source_branch_ref) if source_branch_ref
   end
diff --git a/app/services/merge_requests/conflicts/list_service.rb b/app/services/merge_requests/conflicts/list_service.rb
index 9bf825186434ae8880ad0ebd007ac2c50fea1967..9835606812c889710157260833f2bcc65d9ce00e 100644
--- a/app/services/merge_requests/conflicts/list_service.rb
+++ b/app/services/merge_requests/conflicts/list_service.rb
@@ -15,6 +15,7 @@ module MergeRequests
 
         return @conflicts_can_be_resolved_in_ui = false unless merge_request.cannot_be_merged?
         return @conflicts_can_be_resolved_in_ui = false unless merge_request.has_complete_diff_refs?
+        return @conflicts_can_be_resolved_in_ui = false if merge_request.branch_missing?
 
         begin
           # Try to parse each conflict. If the MR's mergeable status hasn't been
diff --git a/lib/gitlab/diff/position_tracer.rb b/lib/gitlab/diff/position_tracer.rb
index c7542a8fabcb1297fd9ca4577134360ee811d292..e89ff238ec74d605b037f7fd58be7e497135b02d 100644
--- a/lib/gitlab/diff/position_tracer.rb
+++ b/lib/gitlab/diff/position_tracer.rb
@@ -16,7 +16,7 @@ module Gitlab
       end
 
       def trace(old_position)
-        return unless old_diff_refs.complete? && new_diff_refs.complete?
+        return unless old_diff_refs&.complete? && new_diff_refs&.complete?
         return unless old_position.diff_refs == old_diff_refs
 
         # Suppose we have an MR with source branch `feature` and target branch `master`.
diff --git a/spec/services/merge_requests/conflicts/list_service_spec.rb b/spec/services/merge_requests/conflicts/list_service_spec.rb
index e8a305d6130934b9739d45306f09a8c61772ea68..23982b9e6e128882749dcf9f95de9af5a3fdccd2 100644
--- a/spec/services/merge_requests/conflicts/list_service_spec.rb
+++ b/spec/services/merge_requests/conflicts/list_service_spec.rb
@@ -25,6 +25,13 @@ describe MergeRequests::Conflicts::ListService do
       expect(conflicts_service(merge_request).can_be_resolved_in_ui?).to be_falsey
     end
 
+    it 'returns a falsey value when one of the MR branches is missing' do
+      merge_request = create_merge_request('conflict-resolvable')
+      merge_request.project.repository.rm_branch(merge_request.author, 'conflict-resolvable')
+
+      expect(conflicts_service(merge_request).can_be_resolved_in_ui?).to be_falsey
+    end
+
     it 'returns a falsey value when the MR has a missing ref after a force push' do
       merge_request = create_merge_request('conflict-resolvable')
       service = conflicts_service(merge_request)