diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb
index 395a8bffe9239ce4af077276384ec99908ee2fa8..47f7e0b1b280fcacc124b2037ed8cea545cd59ae 100644
--- a/app/controllers/projects_controller.rb
+++ b/app/controllers/projects_controller.rb
@@ -316,6 +316,7 @@ def project_params_ce
       :namespace_id,
       :only_allow_merge_if_all_discussions_are_resolved,
       :only_allow_merge_if_pipeline_succeeds,
+      :printing_merge_request_link_enabled,
       :path,
       :public_builds,
       :request_access_enabled,
diff --git a/app/services/merge_requests/get_urls_service.rb b/app/services/merge_requests/get_urls_service.rb
index ae386b53f429bf563bde55e05d17d0ede67b3fc4..f00a33969a8bb2914aaaa5776572972195ab64b7 100644
--- a/app/services/merge_requests/get_urls_service.rb
+++ b/app/services/merge_requests/get_urls_service.rb
@@ -7,6 +7,8 @@ def initialize(project)
     end
 
     def execute(changes)
+      return [] unless project.printing_merge_request_link_enabled
+
       branches = get_branches(changes)
       merge_requests_map = opened_merge_requests_from_source_branches(branches)
       branches.map do |branch|
diff --git a/app/views/projects/_merge_request_merge_settings.html.haml b/app/views/projects/_merge_request_merge_settings.html.haml
index 188198c47d532c814472276d94b7ec12874295f2..61420fd0fb6cdd9ddca2dcaa47b4d1580bc4ba52 100644
--- a/app/views/projects/_merge_request_merge_settings.html.haml
+++ b/app/views/projects/_merge_request_merge_settings.html.haml
@@ -13,3 +13,7 @@
     = form.label :only_allow_merge_if_all_discussions_are_resolved do
       = form.check_box :only_allow_merge_if_all_discussions_are_resolved
       %strong Only allow merge requests to be merged if all discussions are resolved
+  .checkbox
+    = form.label :printing_merge_request_link_enabled do
+      = form.check_box :printing_merge_request_link_enabled
+      %strong Show link to create/view merge request when pushing from the command line
diff --git a/changelogs/unreleased/21451-allow-disable-mr-link.yml b/changelogs/unreleased/21451-allow-disable-mr-link.yml
new file mode 100644
index 0000000000000000000000000000000000000000..ef99970a7a2ee3d5e7be8c6aa512a07e03e91726
--- /dev/null
+++ b/changelogs/unreleased/21451-allow-disable-mr-link.yml
@@ -0,0 +1,4 @@
+---
+title: Add ability to disable Merge Request URL on push
+merge_request: 9663
+author: Alex Sanford
diff --git a/db/migrate/20170301125302_add_printing_merge_request_link_enabled_to_project.rb b/db/migrate/20170301125302_add_printing_merge_request_link_enabled_to_project.rb
new file mode 100644
index 0000000000000000000000000000000000000000..f54608ecceb55b3f287da9c7d393c5a910037c1b
--- /dev/null
+++ b/db/migrate/20170301125302_add_printing_merge_request_link_enabled_to_project.rb
@@ -0,0 +1,18 @@
+# See http://doc.gitlab.com/ce/development/migration_style_guide.html
+# for more information on how to write migrations for GitLab.
+
+class AddPrintingMergeRequestLinkEnabledToProject < ActiveRecord::Migration
+  include Gitlab::Database::MigrationHelpers
+  disable_ddl_transaction!
+
+  # Set this constant to true if this migration requires downtime.
+  DOWNTIME = false
+
+  def up
+    add_column_with_default(:projects, :printing_merge_request_link_enabled, :boolean, default: true)
+  end
+
+  def down
+    remove_column(:projects, :printing_merge_request_link_enabled)
+  end
+end
diff --git a/db/schema.rb b/db/schema.rb
index 3bef910c1d6d5a7abb1986435bcd747e108b4765..6eb3c95de93bc32bcdb454e0dadc32e445e727d7 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -1003,6 +1003,7 @@
     t.boolean "lfs_enabled"
     t.text "description_html"
     t.boolean "only_allow_merge_if_all_discussions_are_resolved"
+    t.boolean "printing_merge_request_link_enabled", default: true, null: false
   end
 
   add_index "projects", ["ci_id"], name: "index_projects_on_ci_id", using: :btree
diff --git a/spec/features/projects/settings/merge_requests_settings_spec.rb b/spec/features/projects/settings/merge_requests_settings_spec.rb
index 6815039d5edadf42fe7f3336b603844280abc437..321af416c9146a32ff6c47c718e3c5592119f24e 100644
--- a/spec/features/projects/settings/merge_requests_settings_spec.rb
+++ b/spec/features/projects/settings/merge_requests_settings_spec.rb
@@ -62,4 +62,27 @@
       expect(page).to have_content('Only allow merge requests to be merged if all discussions are resolved')
     end
   end
+
+  describe 'Checkbox to enable merge request link' do
+    before do
+      visit edit_project_path(project)
+    end
+
+    scenario 'is initially checked' do
+      checkbox = find_field('project_printing_merge_request_link_enabled')
+      expect(checkbox).to be_checked
+    end
+
+    scenario 'when unchecked sets :printing_merge_request_link_enabled to false' do
+      uncheck('project_printing_merge_request_link_enabled')
+      click_on('Save')
+
+      # Wait for save to complete and page to reload
+      checkbox = find_field('project_printing_merge_request_link_enabled')
+      expect(checkbox).not_to be_checked
+
+      project.reload
+      expect(project.printing_merge_request_link_enabled).to be(false)
+    end
+  end
 end
diff --git a/spec/requests/api/internal_spec.rb b/spec/requests/api/internal_spec.rb
index f18b8e98707812b0875378498369405e9a11cb5d..63ec00cdf0491969b34583161162a7cc848a9974 100644
--- a/spec/requests/api/internal_spec.rb
+++ b/spec/requests/api/internal_spec.rb
@@ -397,16 +397,25 @@
 
     before do
       project.team << [user, :developer]
-      get api("/internal/merge_request_urls?project=#{repo_name}&changes=#{changes}"), secret_token: secret_token
     end
 
     it 'returns link to create new merge request' do
+      get api("/internal/merge_request_urls?project=#{repo_name}&changes=#{changes}"), secret_token: secret_token
+
       expect(json_response).to match [{
         "branch_name" => "new_branch",
         "url" => "http://#{Gitlab.config.gitlab.host}/#{project.namespace.name}/#{project.path}/merge_requests/new?merge_request%5Bsource_branch%5D=new_branch",
         "new_merge_request" => true
       }]
     end
+
+    it 'returns empty array if printing_merge_request_link_enabled is false' do
+      project.update!(printing_merge_request_link_enabled: false)
+
+      get api("/internal/merge_request_urls?project=#{repo_name}&changes=#{changes}"), secret_token: secret_token
+
+      expect(json_response).to eq([])
+    end
   end
 
   describe 'POST /notify_post_receive' do
diff --git a/spec/services/merge_requests/get_urls_service_spec.rb b/spec/services/merge_requests/get_urls_service_spec.rb
index 08829e4be70589493381a75119117fe0688e56d3..b7a0590720893d247c814e0fbea08b32abaffaa2 100644
--- a/spec/services/merge_requests/get_urls_service_spec.rb
+++ b/spec/services/merge_requests/get_urls_service_spec.rb
@@ -130,5 +130,15 @@
         }])
       end
     end
+
+    context 'when printing_merge_request_link_enabled is false' do
+      it 'returns empty array' do
+        project.update!(printing_merge_request_link_enabled: false)
+
+        result = service.execute(existing_branch_changes)
+
+        expect(result).to eq([])
+      end
+    end
   end
 end