diff --git a/CHANGELOG b/CHANGELOG
index b927b60140e1ca2ed907bc683b7371f730c752e9..2cea709f16707edbdde57683dbe21cfa7fcc7871 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -26,6 +26,7 @@ v 7.9.0 (unreleased)
   - Add Bitbucket omniauth provider.
   - Add Bitbucket importer.
   - Support referencing issues to a project whose name starts with a digit
+  - Condense commits already in target branch when updating merge request source branch.
 
 v 7.8.2
   - Fix service migration issue when upgrading from versions prior to 7.3
diff --git a/app/models/note.rb b/app/models/note.rb
index e6c258ffbe95d8b47723ce845361749c31374ade..e79b7a88344445d26977b50a4bcea57ded441416 100644
--- a/app/models/note.rb
+++ b/app/models/note.rb
@@ -151,18 +151,41 @@ class Note < ActiveRecord::Base
       )
     end
 
-    def create_new_commits_note(noteable, project, author, commits)
-      commits_text = ActionController::Base.helpers.pluralize(commits.size, 'new commit')
+    def create_new_commits_note(merge_request, project, author, new_commits, existing_commits = [])
+      total_count = new_commits.length + existing_commits.length
+      commits_text = ActionController::Base.helpers.pluralize(total_count, 'commit')
       body = "Added #{commits_text}:\n\n"
 
-      commits.each do |commit|
+      if existing_commits.length > 0
+        commit_ids =
+          if existing_commits.length == 1
+            existing_commits.first.short_id
+          else
+            "#{existing_commits.first.short_id}...#{existing_commits.last.short_id}"
+          end
+
+        commits_text = ActionController::Base.helpers.pluralize(existing_commits.length, 'commit')
+
+        branch = 
+          if merge_request.for_fork?
+            "#{merge_request.target_project_namespace}:#{merge_request.target_branch}"
+          else
+            merge_request.target_branch
+          end
+
+        message = "* #{commit_ids} - _#{commits_text} from branch `#{branch}`_"
+        body << message
+        body << "\n"
+      end
+
+      new_commits.each do |commit|
         message = "* #{commit.short_id} - #{commit.title}"
         body << message
         body << "\n"
       end
 
       create(
-        noteable: noteable,
+        noteable: merge_request,
         project: project,
         author: author,
         note: body,
diff --git a/app/services/merge_requests/refresh_service.rb b/app/services/merge_requests/refresh_service.rb
index 96761bec99f887c3664168ac2e7d14a596ea2d88..ea846472766ac9f33eb72dc0300dd34b1cf32754 100644
--- a/app/services/merge_requests/refresh_service.rb
+++ b/app/services/merge_requests/refresh_service.rb
@@ -82,8 +82,14 @@ module MergeRequests
       merge_requests = filter_merge_requests(merge_requests)
 
       merge_requests.each do |merge_request|
+        mr_commit_ids = Set.new(merge_request.commits.map(&:id))
+
+        new_commits, existing_commits = @commits.partition do |commit|
+          mr_commit_ids.include?(commit.id)
+        end
+
         Note.create_new_commits_note(merge_request, merge_request.project,
-                                     @current_user, @commits)
+                                     @current_user, new_commits, existing_commits)
       end
     end
 
diff --git a/spec/services/merge_requests/refresh_service_spec.rb b/spec/services/merge_requests/refresh_service_spec.rb
index 2830da87814f376dd4297e00abd6029d4a7887ba..879df0c9c67655bfcf7880aab8c7e5cffe8bc0ac 100644
--- a/spec/services/merge_requests/refresh_service_spec.rb
+++ b/spec/services/merge_requests/refresh_service_spec.rb
@@ -61,7 +61,7 @@ describe MergeRequests::RefreshService do
 
       it { expect(@merge_request.notes).to be_empty }
       it { expect(@merge_request).to be_open }
-      it { expect(@fork_merge_request.notes.last.note).to include('new commit') }
+      it { expect(@fork_merge_request.notes.last.note).to include('Added 4 commits') }
       it { expect(@fork_merge_request).to be_open }
     end