diff --git a/app/workers/merge_worker.rb b/app/workers/merge_worker.rb
index 6a8665c179ab89057561511623dae4949e890c75..5d1a8555b7d69e08b7071f0c163de4e7189bdd8d 100644
--- a/app/workers/merge_worker.rb
+++ b/app/workers/merge_worker.rb
@@ -14,6 +14,10 @@ class MergeWorker
     if result[:status] == :success && params[:should_remove_source_branch].present?
       DeleteBranchService.new(merge_request.source_project, current_user).
         execute(merge_request.source_branch)
+
+      merge_request.source_project.repository.expire_branch_names
     end
+
+    result
   end
 end
diff --git a/spec/workers/merge_worker_spec.rb b/spec/workers/merge_worker_spec.rb
new file mode 100644
index 0000000000000000000000000000000000000000..b11c5de94e34e3e7d7edccab2f695fc738d26aba
--- /dev/null
+++ b/spec/workers/merge_worker_spec.rb
@@ -0,0 +1,28 @@
+require 'spec_helper'
+
+describe MergeWorker do
+  describe "remove source branch" do
+    let!(:merge_request) { create(:merge_request, source_branch: "markdown") }
+    let!(:source_project) { merge_request.source_project }
+    let!(:project) { merge_request.project }
+    let!(:author) { merge_request.author }
+
+    before do
+      source_project.team << [author, :master]
+      source_project.repository.expire_branch_names
+    end
+
+    it 'clears cache of source repo after removing source branch' do
+      expect(source_project.repository.branch_names).to include('markdown')
+
+      MergeWorker.new.perform(
+        merge_request.id, merge_request.author_id,
+        commit_message: 'wow such merge',
+        should_remove_source_branch: true)
+
+      merge_request.reload
+      expect(merge_request).to be_merged
+      expect(source_project.repository.branch_names).not_to include('markdown')
+    end
+  end
+end
diff --git a/spec/workers/post_receive_spec.rb b/spec/workers/post_receive_spec.rb
index 46eae9ab0816fbf11e91418720d96e006543a82f..e4151b9bb6a62bb6e306bfc262af2affba83c32e 100644
--- a/spec/workers/post_receive_spec.rb
+++ b/spec/workers/post_receive_spec.rb
@@ -4,7 +4,7 @@ describe PostReceive do
   let(:changes) { "123456 789012 refs/heads/tést\n654321 210987 refs/tags/tag" }
   let(:wrongly_encoded_changes) { changes.encode("ISO-8859-1").force_encoding("UTF-8") }
   let(:base64_changes) { Base64.encode64(wrongly_encoded_changes) }
-  
+
   context "as a resque worker" do
     it "reponds to #perform" do
       expect(PostReceive.new).to respond_to(:perform)