diff --git a/app/contexts/commit_load.rb b/app/contexts/commit_load.rb
index f57c49692ca1edefd9622d36c76eef898ac16604..81fb4925cc8e969379e535b711fece8b1c96a4e4 100644
--- a/app/contexts/commit_load.rb
+++ b/app/contexts/commit_load.rb
@@ -5,7 +5,8 @@ class CommitLoad < BaseContext
       suppress_diff: false,
       line_notes: [],
       notes_count: 0,
-      note: nil
+      note: nil, 
+      status: :ok
     }
 
     commit = project.commit(params[:id])
@@ -14,11 +15,17 @@ class CommitLoad < BaseContext
       commit = CommitDecorator.decorate(commit)
       line_notes = project.commit_line_notes(commit)
 
-      result[:suppress_diff] = true if commit.diffs.size > 200 && !params[:force_show_diff]
       result[:commit] = commit
       result[:note] = project.build_commit_note(commit)
       result[:line_notes] = line_notes
       result[:notes_count] = line_notes.count + project.commit_notes(commit).count
+
+      begin
+        result[:suppress_diff] = true if commit.diffs.size > 200 && !params[:force_show_diff]
+      rescue Grit::Git::GitTimeout
+        result[:suppress_diff] = true
+        result[:status] = :huge_commit
+      end
     end
 
     result
diff --git a/app/controllers/commits_controller.rb b/app/controllers/commits_controller.rb
index 861fc3245a9d43e8b1a869e651a8c4c4936d2b3c..717912d9e92eb0b709b9f2ae149ff9244a2eea5f 100644
--- a/app/controllers/commits_controller.rb
+++ b/app/controllers/commits_controller.rb
@@ -41,8 +41,9 @@ class CommitsController < ApplicationController
       return git_not_found!
     end
 
-  rescue Grit::Git::GitTimeout
-    render "huge_commit"
+    if result[:status] == :huge_commit
+      render "huge_commit" and return
+    end
   end
 
   def compare