diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb
index 5a48fe66281022a3c093738724aa8bc83f2fdb3b..324d1795ab4d90c56ea3c2452d7c451dd9c52aeb 100644
--- a/app/models/merge_request.rb
+++ b/app/models/merge_request.rb
@@ -205,20 +205,7 @@ class MergeRequest < ActiveRecord::Base
   end
 
   def check_if_can_be_merged
-    can_be_merged =
-      if for_fork?
-        Gitlab::Satellite::MergeAction.new(self.author, self).can_be_merged?
-      else
-        rugged = project.repository.rugged
-        our_commit = rugged.branches[target_branch].target
-        their_commit = rugged.branches[source_branch].target
-
-        if our_commit && their_commit
-          !rugged.merge_commits(our_commit, their_commit).conflicts?
-        end
-      end
-
-    if can_be_merged
+    if Gitlab::Satellite::MergeAction.new(self.author, self).can_be_merged?
       mark_as_mergeable
     else
       mark_as_unmergeable
diff --git a/app/models/repository.rb b/app/models/repository.rb
index dae19b9ddca1e52503e860505d52784905e570ee..29bccbbaf5859258afc469260364ea77412376f1 100644
--- a/app/models/repository.rb
+++ b/app/models/repository.rb
@@ -403,6 +403,8 @@ class Repository
     Gitlab::Git::Blob.remove(raw_repository, options)
   end
 
+  private
+
   def user_to_comitter(user)
     {
       email: user.email,
diff --git a/app/services/merge_requests/auto_merge_service.rb b/app/services/merge_requests/auto_merge_service.rb
index db824d452d0cecd9494a400aa3ecdb84668271fe..cdedf48b0c006f39c164d968ceb4130fa35efc66 100644
--- a/app/services/merge_requests/auto_merge_service.rb
+++ b/app/services/merge_requests/auto_merge_service.rb
@@ -5,20 +5,17 @@ module MergeRequests
   # mark merge request as merged and execute all hooks and notifications
   # Called when you do merge via GitLab UI
   class AutoMergeService < BaseMergeService
-    attr_reader :merge_request, :commit_message
-
     def execute(merge_request, commit_message)
-      @commit_message = commit_message
-      @merge_request = merge_request
-
       merge_request.lock_mr
 
-      if merge!
+      if Gitlab::Satellite::MergeAction.new(current_user, merge_request).merge!(commit_message)
         merge_request.merge
+
         create_merge_event(merge_request, current_user)
         create_note(merge_request)
         notification_service.merge_mr(merge_request, current_user)
         execute_hooks(merge_request, 'merge')
+
         true
       else
         merge_request.unlock_mr
@@ -29,47 +26,5 @@ module MergeRequests
       merge_request.mark_as_unmergeable
       false
     end
-
-    def merge!
-      if merge_request.for_fork?
-        Gitlab::Satellite::MergeAction.new(current_user, merge_request).merge!(commit_message)
-      else
-        # Merge local branches using rugged instead of satellites
-        if sha = commit
-          after_commit(sha, merge_request.target_branch)
-
-          if merge_request.remove_source_branch?
-            DeleteBranchService.new(merge_request.source_project, current_user).execute(merge_request.source_branch)
-          end
-
-          true
-        else
-          false
-        end
-      end
-    end
-
-    def commit
-      committer = repository.user_to_comitter(current_user)
-
-      options = {
-        message: commit_message,
-        author: committer,
-        committer: committer
-      }
-
-      repository.merge(merge_request.source_branch, merge_request.target_branch, options)
-    end
-
-    def after_commit(sha, branch)
-      commit = repository.commit(sha)
-      full_ref = "#{Gitlab::Git::BRANCH_REF_PREFIX}#{branch}"
-      old_sha = commit.parent_id || Gitlab::Git::BLANK_SHA
-      GitPushService.new.execute(project, current_user, old_sha, sha, full_ref)
-    end
-
-    def repository
-      project.repository
-    end
   end
 end