diff --git a/app/controllers/projects/commit_controller.rb b/app/controllers/projects/commit_controller.rb
index 8a1b7899be3d0172aeb088de81f8b7f71ef21e45..35df421e09de6d161cea226d99a60c5775c3ac79 100644
--- a/app/controllers/projects/commit_controller.rb
+++ b/app/controllers/projects/commit_controller.rb
@@ -36,6 +36,6 @@ class Projects::CommitController < Projects::ApplicationController
   end
 
   def commit
-    @commit ||= @project.repository.commit(params[:id])
+    @commit ||= @project.commit(params[:id])
   end
 end
diff --git a/app/controllers/projects/merge_requests_controller.rb b/app/controllers/projects/merge_requests_controller.rb
index ab75f2ddb7351f5dd22007de9e6787134d24dcd2..41b4e55a598f2e270797b578d9cd0d1553e8932c 100644
--- a/app/controllers/projects/merge_requests_controller.rb
+++ b/app/controllers/projects/merge_requests_controller.rb
@@ -146,7 +146,7 @@ class Projects::MergeRequestsController < Projects::ApplicationController
 
   def branch_to
     @target_project = selected_target_project
-    @commit = @target_project.repository.commit(params[:ref]) if params[:ref].present?
+    @commit = @target_project.commit(params[:ref]) if params[:ref].present?
   end
 
   def update_branches
diff --git a/app/models/note.rb b/app/models/note.rb
index e3c571a15747532d642d348809e5ec1a32b7c414..99e86ac025035cca7fe7cb13c9d202d12b2d666f 100644
--- a/app/models/note.rb
+++ b/app/models/note.rb
@@ -290,7 +290,7 @@ class Note < ActiveRecord::Base
     # +mentioner+.
     def noteable_project_id(noteable, mentioning_project)
       if noteable.is_a?(Commit)
-        if mentioning_project.repository.commit(noteable.id)
+        if mentioning_project.commit(noteable.id)
           # The noteable commit belongs to the mentioner's project
           mentioning_project.id
         else
@@ -512,7 +512,7 @@ class Note < ActiveRecord::Base
   # override to return commits, which are not active record
   def noteable
     if for_commit?
-      project.repository.commit(commit_id)
+      project.commit(commit_id)
     else
       super
     end
diff --git a/app/models/project.rb b/app/models/project.rb
index 4c1404ee9f855bce92ea26a948308e9a2d859d4c..293ee04f228c76c89d5b6284c86bb556ab3ad717 100644
--- a/app/models/project.rb
+++ b/app/models/project.rb
@@ -257,7 +257,7 @@ class Project < ActiveRecord::Base
     @repository ||= Repository.new(path_with_namespace, nil, self)
   end
 
-  def commit(id)
+  def commit(id = 'HEAD')
     repository.commit(id)
   end
 
diff --git a/app/models/protected_branch.rb b/app/models/protected_branch.rb
index 97207ba12726c4cd6179f6e623d5a447ff0de39f..8ebd790a89e1be20e12c4a6764f1cc4709a4441e 100644
--- a/app/models/protected_branch.rb
+++ b/app/models/protected_branch.rb
@@ -18,6 +18,6 @@ class ProtectedBranch < ActiveRecord::Base
   validates :project, presence: true
 
   def commit
-    project.repository.commit(self.name)
+    project.commit(self.name)
   end
 end
diff --git a/app/services/create_tag_service.rb b/app/services/create_tag_service.rb
index 25f9e2032464665f4137b817f6ac2c12dc3cab96..1a7318048b3323ce8a32327cb7638c2d3e4570df 100644
--- a/app/services/create_tag_service.rb
+++ b/app/services/create_tag_service.rb
@@ -38,7 +38,7 @@ class CreateTagService < BaseService
   end
 
   def create_push_data(project, user, tag)
-    commits = [project.repository.commit(tag.target)].compact
+    commits = [project.commit(tag.target)].compact
     Gitlab::PushDataBuilder.
       build(project, user, Gitlab::Git::BLANK_SHA, tag.target, "#{Gitlab::Git::TAG_REF_PREFIX}#{tag.name}", commits, tag.message)
   end
diff --git a/app/services/git_tag_push_service.rb b/app/services/git_tag_push_service.rb
index bf203bbd69272c1f80103403ae87b6a7937abb02..075a6118da2054f285c90720f87dc4b392a04faa 100644
--- a/app/services/git_tag_push_service.rb
+++ b/app/services/git_tag_push_service.rb
@@ -25,7 +25,7 @@ class GitTagPushService
       tag_name = Gitlab::Git.ref_name(ref)
       tag = project.repository.find_tag(tag_name)
       if tag && tag.target == newrev
-        commit = project.repository.commit(tag.target)
+        commit = project.commit(tag.target)
         commits = [commit].compact
         message = tag.message
       end
diff --git a/app/services/projects/participants_service.rb b/app/services/projects/participants_service.rb
index c2d8f48f6e420ee0b55e3f8671d036a24052e4d2..05106fa78982e9b3094c926b574809ac4dd800a3 100644
--- a/app/services/projects/participants_service.rb
+++ b/app/services/projects/participants_service.rb
@@ -22,7 +22,7 @@ module Projects
           merge_request = project.merge_requests.find_by_iid(id)
           merge_request.participants(current_user) if merge_request
         when "Commit"
-          commit = project.repository.commit(id)
+          commit = project.commit(id)
           commit.participants(project, current_user) if commit
         end
 
diff --git a/lib/api/commits.rb b/lib/api/commits.rb
index 0de4e720ffe00ca8c8af9b0746e234b7d0ac3902..23270b1c0f46529a1482eea5507009a5c9757870 100644
--- a/lib/api/commits.rb
+++ b/lib/api/commits.rb
@@ -32,7 +32,7 @@ module API
       #   GET /projects/:id/repository/commits/:sha
       get ":id/repository/commits/:sha" do
         sha = params[:sha]
-        commit = user_project.repository.commit(sha)
+        commit = user_project.commit(sha)
         not_found! "Commit" unless commit
         present commit, with: Entities::RepoCommitDetail
       end
@@ -46,7 +46,7 @@ module API
       #   GET /projects/:id/repository/commits/:sha/diff
       get ":id/repository/commits/:sha/diff" do
         sha = params[:sha]
-        commit = user_project.repository.commit(sha)
+        commit = user_project.commit(sha)
         not_found! "Commit" unless commit
         commit.diffs
       end
@@ -60,7 +60,7 @@ module API
       #   GET /projects/:id/repository/commits/:sha/comments
       get ':id/repository/commits/:sha/comments' do
         sha = params[:sha]
-        commit = user_project.repository.commit(sha)
+        commit = user_project.commit(sha)
         not_found! 'Commit' unless commit
         notes = Note.where(commit_id: commit.id)
         present paginate(notes), with: Entities::CommitNote
@@ -81,7 +81,7 @@ module API
         required_attributes! [:note]
 
         sha = params[:sha]
-        commit = user_project.repository.commit(sha)
+        commit = user_project.commit(sha)
         not_found! 'Commit' unless commit
         opts = {
           note: params[:note],
diff --git a/lib/api/files.rb b/lib/api/files.rb
index 3176ef0e256297e489176aea1a6d92123cbcb60a..e0ea6d7dd1dcedd191c63cdca3582f532973513b 100644
--- a/lib/api/files.rb
+++ b/lib/api/files.rb
@@ -34,7 +34,7 @@ module API
         ref = attrs.delete(:ref)
         file_path = attrs.delete(:file_path)
 
-        commit = user_project.repository.commit(ref)
+        commit = user_project.commit(ref)
         not_found! 'Commit' unless commit
 
         blob = user_project.repository.blob_at(commit.sha, file_path)
diff --git a/lib/api/repositories.rb b/lib/api/repositories.rb
index 1fbf3dca3c6faff82f943b72b7b2c1aada99330f..2d96c9666d2a907119fecdfcf8948a19e16a0478 100644
--- a/lib/api/repositories.rb
+++ b/lib/api/repositories.rb
@@ -62,7 +62,7 @@ module API
         ref = params[:ref_name] || user_project.try(:default_branch) || 'master'
         path = params[:path] || nil
 
-        commit = user_project.repository.commit(ref)
+        commit = user_project.commit(ref)
         not_found!('Tree') unless commit
 
         tree = user_project.repository.tree(commit.id, path)
diff --git a/lib/gitlab/identifier.rb b/lib/gitlab/identifier.rb
index 6e4de197eeb3b31bbe6ba44c143decea3b811eaf..3e5d728f3bce43ecc99e37db99895f17ee7c0f74 100644
--- a/lib/gitlab/identifier.rb
+++ b/lib/gitlab/identifier.rb
@@ -5,7 +5,7 @@ module Gitlab
     def identify(identifier, project, newrev)
       if identifier.blank?
         # Local push from gitlab
-        email = project.repository.commit(newrev).author_email rescue nil
+        email = project.commit(newrev).author_email rescue nil
         User.find_by(email: email) if email
 
       elsif identifier =~ /\Auser-\d+\Z/
diff --git a/lib/gitlab/markdown/commit_range_reference_filter.rb b/lib/gitlab/markdown/commit_range_reference_filter.rb
index 1128c1bed7a3eecf47590966ee7e0156f04218a3..baa97bee9bfd468187836254cb1df43e85564a6f 100644
--- a/lib/gitlab/markdown/commit_range_reference_filter.rb
+++ b/lib/gitlab/markdown/commit_range_reference_filter.rb
@@ -84,7 +84,7 @@ module Gitlab
 
       def commit(id)
         unless @commit_map[id]
-          @commit_map[id] = project.repository.commit(id)
+          @commit_map[id] = project.commit(id)
         end
 
         @commit_map[id]
diff --git a/lib/gitlab/markdown/commit_reference_filter.rb b/lib/gitlab/markdown/commit_reference_filter.rb
index 745de6402cf1ac77c8f3ee5a5375e7ff01012cab..66598127f6e0ec78601433909d310711b000d954 100644
--- a/lib/gitlab/markdown/commit_reference_filter.rb
+++ b/lib/gitlab/markdown/commit_reference_filter.rb
@@ -66,7 +66,7 @@ module Gitlab
 
       def commit_from_ref(project, commit_ref)
         if project && project.valid_repo?
-          project.repository.commit(commit_ref)
+          project.commit(commit_ref)
         end
       end
 
diff --git a/lib/gitlab/note_data_builder.rb b/lib/gitlab/note_data_builder.rb
index 644dec45dca6db0eec39da424f2d443c2a2abc27..0f2abd1b49c6d612e7699cbd2bf7c0c21cd8c5e2 100644
--- a/lib/gitlab/note_data_builder.rb
+++ b/lib/gitlab/note_data_builder.rb
@@ -69,7 +69,7 @@ module Gitlab
 
       def build_data_for_commit(project, user, note)
         # commit_id is the SHA hash
-        commit = project.repository.commit(note.commit_id)
+        commit = project.commit(note.commit_id)
         commit.hook_attrs(project)
       end
     end
diff --git a/spec/controllers/commit_controller_spec.rb b/spec/controllers/commit_controller_spec.rb
index 3394a1f863fa1f12477a2ea0466c186e14120a12..2cfa399a047ac0de4161a429f6479f22799dc343 100644
--- a/spec/controllers/commit_controller_spec.rb
+++ b/spec/controllers/commit_controller_spec.rb
@@ -3,7 +3,7 @@ require 'spec_helper'
 describe Projects::CommitController do
   let(:project) { create(:project) }
   let(:user)    { create(:user) }
-  let(:commit)  { project.repository.commit("master") }
+  let(:commit)  { project.commit("master") }
 
   before do
     sign_in(user)
diff --git a/spec/features/gitlab_flavored_markdown_spec.rb b/spec/features/gitlab_flavored_markdown_spec.rb
index fca1a06eb88d3d0ec2dd397a5e95cf9aec723ef6..133beba7b98e96f96b678a2b26aafb97a37932b7 100644
--- a/spec/features/gitlab_flavored_markdown_spec.rb
+++ b/spec/features/gitlab_flavored_markdown_spec.rb
@@ -14,7 +14,7 @@ describe "GitLab Flavored Markdown", feature: true do
     Commit.any_instance.stub(title: "fix ##{issue.iid}\n\nask @#{fred.username} for details")
   end
 
-  let(:commit) { project.repository.commit }
+  let(:commit) { project.commit }
 
   before do
     login_as :user
diff --git a/spec/helpers/diff_helper_spec.rb b/spec/helpers/diff_helper_spec.rb
index 5bd09793b11dac1209da4d095263dc0b728d1181..95719b4b49f474c70941cc381baa8f9be48923d1 100644
--- a/spec/helpers/diff_helper_spec.rb
+++ b/spec/helpers/diff_helper_spec.rb
@@ -4,7 +4,7 @@ describe DiffHelper do
   include RepoHelpers
 
   let(:project) { create(:project) }
-  let(:commit) { project.repository.commit(sample_commit.id) }
+  let(:commit) { project.commit(sample_commit.id) }
   let(:diff) { commit.diffs.first }
   let(:diff_file) { Gitlab::Diff::File.new(diff) }
 
diff --git a/spec/helpers/gitlab_markdown_helper_spec.rb b/spec/helpers/gitlab_markdown_helper_spec.rb
index 64f130e4ae48b26d65c68552a345031f45194248..e309dbb6a2f9a6429b8b35aaec9de3ac6802f7b2 100644
--- a/spec/helpers/gitlab_markdown_helper_spec.rb
+++ b/spec/helpers/gitlab_markdown_helper_spec.rb
@@ -6,7 +6,7 @@ describe GitlabMarkdownHelper do
   let!(:project) { create(:project) }
 
   let(:user)          { create(:user, username: 'gfm') }
-  let(:commit)        { project.repository.commit }
+  let(:commit)        { project.commit }
   let(:issue)         { create(:issue, project: project) }
   let(:merge_request) { create(:merge_request, source_project: project, target_project: project) }
   let(:snippet)       { create(:project_snippet, project: project) }
diff --git a/spec/helpers/tree_helper_spec.rb b/spec/helpers/tree_helper_spec.rb
index 8271e00f41b24f03669224eaf86cc7d2653efa71..2013b3e4c2a84160ecff0385f4944acb3dee52e1 100644
--- a/spec/helpers/tree_helper_spec.rb
+++ b/spec/helpers/tree_helper_spec.rb
@@ -6,7 +6,7 @@ describe TreeHelper do
 
     before {
       @repository = project.repository
-      @commit = project.repository.commit("e56497bb")
+      @commit = project.commit("e56497bb")
     }
 
     context "on a directory containing more than one file/directory" do
diff --git a/spec/lib/gitlab/diff/file_spec.rb b/spec/lib/gitlab/diff/file_spec.rb
index 40eb45e37cafd9348b73200e5893312c01889672..8b7946f3117269ec0edefea673971b5473f39985 100644
--- a/spec/lib/gitlab/diff/file_spec.rb
+++ b/spec/lib/gitlab/diff/file_spec.rb
@@ -4,7 +4,7 @@ describe Gitlab::Diff::File do
   include RepoHelpers
 
   let(:project) { create(:project) }
-  let(:commit) { project.repository.commit(sample_commit.id) }
+  let(:commit) { project.commit(sample_commit.id) }
   let(:diff) { commit.diffs.first }
   let(:diff_file) { Gitlab::Diff::File.new(diff) }
 
diff --git a/spec/lib/gitlab/diff/parser_spec.rb b/spec/lib/gitlab/diff/parser_spec.rb
index 918f6d0ead4f11b408d30f4fb06918558cdcdd30..4d5d1431683f8995c348494f8b180d77a4429a01 100644
--- a/spec/lib/gitlab/diff/parser_spec.rb
+++ b/spec/lib/gitlab/diff/parser_spec.rb
@@ -4,7 +4,7 @@ describe Gitlab::Diff::Parser do
   include RepoHelpers
 
   let(:project) { create(:project) }
-  let(:commit) { project.repository.commit(sample_commit.id) }
+  let(:commit) { project.commit(sample_commit.id) }
   let(:diff) { commit.diffs.first }
   let(:parser) { Gitlab::Diff::Parser.new }
 
diff --git a/spec/lib/gitlab/markdown/commit_range_reference_filter_spec.rb b/spec/lib/gitlab/markdown/commit_range_reference_filter_spec.rb
index 5ebdc8926e203b9c2698046a160a89426bff6550..f0804ce0056de50e913a209b151f84a03303db02 100644
--- a/spec/lib/gitlab/markdown/commit_range_reference_filter_spec.rb
+++ b/spec/lib/gitlab/markdown/commit_range_reference_filter_spec.rb
@@ -5,8 +5,8 @@ module Gitlab::Markdown
     include ReferenceFilterSpecHelper
 
     let(:project) { create(:project) }
-    let(:commit1) { project.repository.commit }
-    let(:commit2) { project.repository.commit("HEAD~2") }
+    let(:commit1) { project.commit }
+    let(:commit2) { project.commit("HEAD~2") }
 
     it 'requires project context' do
       expect { described_class.call('Commit Range 1c002d..d200c1', {}) }.
@@ -86,8 +86,8 @@ module Gitlab::Markdown
     context 'cross-project reference' do
       let(:namespace) { create(:namespace, name: 'cross-reference') }
       let(:project2)  { create(:project, namespace: namespace) }
-      let(:commit1)   { project.repository.commit }
-      let(:commit2)   { project.repository.commit("HEAD~2") }
+      let(:commit1)   { project.commit }
+      let(:commit2)   { project.commit("HEAD~2") }
       let(:reference) { "#{project2.path_with_namespace}@#{commit1.id}...#{commit2.id}" }
 
       context 'when user can access reference' do
diff --git a/spec/lib/gitlab/markdown/commit_reference_filter_spec.rb b/spec/lib/gitlab/markdown/commit_reference_filter_spec.rb
index 71fd2db2c5899e8722120f26ae2cef74b6a4ceee..f792d7f696e07beaaa769100d20ba4ada4dc0ead 100644
--- a/spec/lib/gitlab/markdown/commit_reference_filter_spec.rb
+++ b/spec/lib/gitlab/markdown/commit_reference_filter_spec.rb
@@ -5,7 +5,7 @@ module Gitlab::Markdown
     include ReferenceFilterSpecHelper
 
     let(:project) { create(:project) }
-    let(:commit)  { project.repository.commit }
+    let(:commit)  { project.commit }
 
     it 'requires project context' do
       expect { described_class.call('Commit 1c002d', {}) }.
@@ -80,7 +80,7 @@ module Gitlab::Markdown
     context 'cross-project reference' do
       let(:namespace) { create(:namespace, name: 'cross-reference') }
       let(:project2)  { create(:project, namespace: namespace) }
-      let(:commit)    { project.repository.commit }
+      let(:commit)    { project.commit }
       let(:reference) { "#{project2.path_with_namespace}@#{commit.id}" }
 
       context 'when user can access reference' do
diff --git a/spec/lib/gitlab/reference_extractor_spec.rb b/spec/lib/gitlab/reference_extractor_spec.rb
index 6fba140f69d8b2091257d2781fe4f86554290233..0f4ea2a24eddbb4e747639ec27d34bfb1ac981ea 100644
--- a/spec/lib/gitlab/reference_extractor_spec.rb
+++ b/spec/lib/gitlab/reference_extractor_spec.rb
@@ -125,7 +125,7 @@ describe Gitlab::ReferenceExtractor do
   end
 
   it 'accesses valid commits' do
-    commit = project.repository.commit('master')
+    commit = project.commit('master')
 
     subject.analyze("this references commits #{commit.sha[0..6]} and 012345")
     extracted = subject.commits
@@ -135,8 +135,8 @@ describe Gitlab::ReferenceExtractor do
   end
 
   it 'accesses valid commit ranges' do
-    commit = project.repository.commit('master')
-    earlier_commit = project.repository.commit('master~2')
+    commit = project.commit('master')
+    earlier_commit = project.commit('master~2')
 
     subject.analyze("this references commits #{earlier_commit.sha[0..6]}...#{commit.sha[0..6]}")
     extracted = subject.commit_ranges
diff --git a/spec/mailers/notify_spec.rb b/spec/mailers/notify_spec.rb
index 6f7f5835b94d17469c93072ce05cce8588cbad99..d28b4768545e2d5196a4f08dc475cdd03ce720a1 100644
--- a/spec/mailers/notify_spec.rb
+++ b/spec/mailers/notify_spec.rb
@@ -466,7 +466,7 @@ describe Notify do
       end
 
       describe 'on a commit' do
-        let(:commit) { project.repository.commit }
+        let(:commit) { project.commit }
 
         before(:each) { allow(note).to receive(:noteable).and_return(commit) }
 
diff --git a/spec/models/commit_spec.rb b/spec/models/commit_spec.rb
index 506bc3339b63d6f7ee3702d50d44881db0734bc4..9c37c036eae443b5701bf6dcd7288e72453a0482 100644
--- a/spec/models/commit_spec.rb
+++ b/spec/models/commit_spec.rb
@@ -2,7 +2,7 @@ require 'spec_helper'
 
 describe Commit do
   let(:project) { create :project }
-  let(:commit) { project.repository.commit }
+  let(:commit) { project.commit }
 
   describe '#title' do
     it "returns no_commit_message when safe_message is blank" do
diff --git a/spec/models/note_spec.rb b/spec/models/note_spec.rb
index e7e6717e775730bcd553af4322aa863baeb23b20..095eb1500a9b90f2c8a96cdf858f4562104825de 100644
--- a/spec/models/note_spec.rb
+++ b/spec/models/note_spec.rb
@@ -329,7 +329,7 @@ describe Note do
     let(:author)     { create(:user) }
     let(:issue)      { create(:issue, project: project) }
     let(:mergereq)   { create(:merge_request, :simple, target_project: project, source_project: project) }
-    let(:commit)     { project.repository.commit }
+    let(:commit)     { project.commit }
 
     # Test all of {issue, merge request, commit} in both the referenced and referencing
     # roles, to ensure that the correct information can be inferred from any argument.
@@ -482,8 +482,8 @@ describe Note do
     let(:project) { create :project }
     let(:author) { create :user }
     let(:issue) { create :issue }
-    let(:commit0) { project.repository.commit }
-    let(:commit1) { project.repository.commit('HEAD~2') }
+    let(:commit0) { project.commit }
+    let(:commit1) { project.commit('HEAD~2') }
 
     before do
       Note.create_cross_reference_note(issue, commit0, author, project)
diff --git a/spec/services/git_push_service_spec.rb b/spec/services/git_push_service_spec.rb
index aa9b15dd9ecc1855b112ccb4274964b44c0e3837..246bc1cc33d5afe0ff6bd9e5ca01902f0e0fc665 100644
--- a/spec/services/git_push_service_spec.rb
+++ b/spec/services/git_push_service_spec.rb
@@ -44,7 +44,7 @@ describe GitPushService do
     before do
       service.execute(project, user, @oldrev, @newrev, @ref)
       @push_data = service.push_data
-      @commit = project.repository.commit(@newrev)
+      @commit = project.commit(@newrev)
     end
 
     subject { @push_data }
@@ -151,7 +151,7 @@ describe GitPushService do
   describe "cross-reference notes" do
     let(:issue) { create :issue, project: project }
     let(:commit_author) { create :user }
-    let(:commit) { project.repository.commit }
+    let(:commit) { project.commit }
 
     before do
       commit.stub({
@@ -198,7 +198,7 @@ describe GitPushService do
     let(:issue) { create :issue, project: project }
     let(:other_issue) { create :issue, project: project }
     let(:commit_author) { create :user }
-    let(:closing_commit) { project.repository.commit }
+    let(:closing_commit) { project.commit }
 
     before do
       closing_commit.stub({
diff --git a/spec/services/git_tag_push_service_spec.rb b/spec/services/git_tag_push_service_spec.rb
index a050fdf6c0eb1ac58e08a7243c49d2c76c45db22..76f69b396e03efb3185f631333a9a3da7acedcc4 100644
--- a/spec/services/git_tag_push_service_spec.rb
+++ b/spec/services/git_tag_push_service_spec.rb
@@ -19,7 +19,7 @@ describe GitTagPushService do
       @push_data = service.push_data
       @tag_name = Gitlab::Git.ref_name(@ref)
       @tag = project.repository.find_tag(@tag_name)
-      @commit = project.repository.commit(@tag.target)
+      @commit = project.commit(@tag.target)
     end
 
     subject { @push_data }