diff --git a/CHANGELOG b/CHANGELOG
index 88678b087c5478b8dbebd2b89556969b0d9c83db..3774d64f4ebdbbd8fcfc87e4b4194601d40fa724 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,6 +1,7 @@
 Please view this file on the master branch, on stable branches it's out of date.
 
 v 7.11.0 (unreleased)
+  - Make the first branch pushed to an empty repository the default HEAD (Stan Hu)
   - Make Reply-To config apply to change e-mail confirmation and other Devise notifications (Stan Hu)
   - Add application setting to restrict user signups to e-mail domains (Stan Hu)
   - Don't allow a merge request to be merged when its title starts with "WIP".
diff --git a/app/services/git_push_service.rb b/app/services/git_push_service.rb
index 1b889e0da8b4f81f94074904c606ec4096f58073..bdf36af02fdba0adee2e16f2e178ff2079bdef00 100644
--- a/app/services/git_push_service.rb
+++ b/app/services/git_push_service.rb
@@ -31,6 +31,10 @@ class GitPushService
         # Initial push to the default branch. Take the full history of that branch as "newly pushed".
         @push_commits = project.repository.commits(newrev)
 
+        # Ensure HEAD points to the default branch in case it is not master
+        branch_name = Gitlab::Git.ref_name(ref)
+        project.change_head(branch_name)
+
         # Set protection on the default branch if configured
         if (current_application_settings.default_branch_protection != PROTECTION_NONE)
           developers_can_push = current_application_settings.default_branch_protection == PROTECTION_DEV_CAN_PUSH ? true : false
diff --git a/spec/services/git_push_service_spec.rb b/spec/services/git_push_service_spec.rb
index af37e8319a4c5e6f1ea8393c6dfc0f570ef92a3d..e7558f28768acd1765c99c7ee0b63651cb9a91df 100644
--- a/spec/services/git_push_service_spec.rb
+++ b/spec/services/git_push_service_spec.rb
@@ -234,5 +234,18 @@ describe GitPushService do
       expect(Issue.find(issue.id)).to be_opened
     end
   end
-end
 
+  describe "empty project" do
+    let(:project) { create(:project_empty_repo) }
+    let(:new_ref) { 'refs/heads/feature'}
+
+    before do
+      allow(project).to receive(:default_branch).and_return('feature')
+      expect(project).to receive(:change_head) { 'feature'}
+    end
+
+    it 'push to first branch updates HEAD' do
+      service.execute(project, user, @blankrev, @newrev, new_ref)
+    end
+  end
+end