diff --git a/models/action.go b/models/action.go
index a09e420660..6ca92cf93e 100644
--- a/models/action.go
+++ b/models/action.go
@@ -517,7 +517,7 @@ func CommitRepoAction(opts CommitRepoActionOptions) error {
 	}
 
 	// Change repository bare status and update last updated time.
-	repo.IsBare = false
+	repo.IsBare = repo.IsBare && opts.Commits.Len <= 0
 	if err = UpdateRepository(repo, false); err != nil {
 		return fmt.Errorf("UpdateRepository: %v", err)
 	}
diff --git a/modules/context/repo.go b/modules/context/repo.go
index a59dc7da28..3b159a7aaa 100644
--- a/modules/context/repo.go
+++ b/modules/context/repo.go
@@ -392,6 +392,10 @@ func RepoRef() macaron.Handler {
 				if err != nil {
 					ctx.Handle(500, "GetBranches", err)
 					return
+				} else if len(brs) == 0 {
+					err = fmt.Errorf("No branches in non-bare repository %s",
+						ctx.Repo.GitRepo.Path)
+					ctx.Handle(500, "GetBranches", err)
 				}
 				refName = brs[0]
 			}