diff --git a/CHANGELOG b/CHANGELOG
index 38e91fc3e982690b6bea7bac5b4eacda486ad0d6..25911e02ec6ba569f7578851fac71b2ee01e4a8a 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -57,6 +57,7 @@ v 8.11.0 (unreleased)
   - Sensible state specific default sort order for issues and merge requests !5453 (tomb0y)
   - Fix RequestProfiler::Middleware error when code is reloaded in development
   - Catch what warden might throw when profiling requests to re-throw it
+  - Speed up and reduce memory usage of Commit#repo_changes, Repository#expire_avatar_cache and IrkerWorker
 
 v 8.10.3
   - Fix Import/Export issue importing milestones and labels not associated properly. !5426
diff --git a/Gemfile b/Gemfile
index 5f247abd2fc99f794fba18099ef61e059be49280..16f24553ed1982201ef779c6678135f628daad5c 100644
--- a/Gemfile
+++ b/Gemfile
@@ -53,7 +53,7 @@ gem 'browser', '~> 2.2'
 
 # Extracting information from a git repository
 # Provide access to Gitlab::Git library
-gem 'gitlab_git', '~> 10.4.2'
+gem 'gitlab_git', '~> 10.4.3'
 
 # LDAP Auth
 # GitLab fork with several improvements to original library. For full list of changes
diff --git a/Gemfile.lock b/Gemfile.lock
index 7b4175ea824f68fa5078f4fca9272671a384d16d..866f5014847a9952a102495aeb22adb591c1891f 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -278,7 +278,7 @@ GEM
       diff-lcs (~> 1.1)
       mime-types (>= 1.16, < 3)
       posix-spawn (~> 0.3)
-    gitlab_git (10.4.2)
+    gitlab_git (10.4.3)
       activesupport (~> 4.0)
       charlock_holmes (~> 0.7.3)
       github-linguist (~> 4.7.0)
@@ -870,7 +870,7 @@ DEPENDENCIES
   github-linguist (~> 4.7.0)
   github-markup (~> 1.4)
   gitlab-flowdock-git-hook (~> 1.0.1)
-  gitlab_git (~> 10.4.2)
+  gitlab_git (~> 10.4.3)
   gitlab_meta (= 7.0)
   gitlab_omniauth-ldap (~> 1.2.1)
   gollum-lib (~> 4.2)
diff --git a/app/models/commit.rb b/app/models/commit.rb
index d58c2fb8106d53f1af5dcd5c605ad70dfe086b65..cc413448ce891615492a2546d2967e8aa948da60 100644
--- a/app/models/commit.rb
+++ b/app/models/commit.rb
@@ -334,7 +334,7 @@ def find_author_by_any_email
   def repo_changes
     changes = { added: [], modified: [], removed: [] }
 
-    raw_diffs.each do |diff|
+    raw_diffs(deltas_only: true).each do |diff|
       if diff.deleted_file
         changes[:removed] << diff.old_path
       elsif diff.renamed_file || diff.new_file
diff --git a/app/models/repository.rb b/app/models/repository.rb
index 3d95344a68ffa8a9dda956c009632a96e39560f3..c1170c470ead7f88045eac04034f55b0b125a83f 100644
--- a/app/models/repository.rb
+++ b/app/models/repository.rb
@@ -372,7 +372,7 @@ def expire_avatar_cache(branch_name = nil, revision = nil)
     # We don't want to flush the cache if the commit didn't actually make any
     # changes to any of the possible avatar files.
     if revision && commit = self.commit(revision)
-      return unless commit.raw_diffs.
+      return unless commit.raw_diffs(deltas_only: true).
         any? { |diff| AVATAR_FILES.include?(diff.new_path) }
     end
 
diff --git a/app/workers/irker_worker.rb b/app/workers/irker_worker.rb
index 07cc7c1cbd7037b4711d29bd3978887e66396da8..19f38358eb51171951cfde71f4b4e494cd9511ad 100644
--- a/app/workers/irker_worker.rb
+++ b/app/workers/irker_worker.rb
@@ -141,7 +141,7 @@ def commit_from_id(project, id)
   end
 
   def files_count(commit)
-    diffs = commit.raw_diffs
+    diffs = commit.raw_diffs(deltas_only: true)
 
     files = "#{diffs.real_size} file"
     files += 's' if diffs.size > 1