diff --git a/modules/repository/init.go b/modules/repository/init.go
index 16012864b1..a100456e77 100644
--- a/modules/repository/init.go
+++ b/modules/repository/init.go
@@ -243,6 +243,7 @@ func adoptRepository(ctx models.DBContext, repoPath string, u *models.User, repo
 	found := false
 	hasDefault := false
 	hasMaster := false
+	hasMain := false
 	for _, branch := range branches {
 		if branch == repo.DefaultBranch {
 			found = true
@@ -251,6 +252,8 @@ func adoptRepository(ctx models.DBContext, repoPath string, u *models.User, repo
 			hasDefault = true
 		} else if branch == "master" {
 			hasMaster = true
+		} else if branch == "main" {
+			hasMain = true
 		}
 	}
 	if !found {
@@ -258,6 +261,8 @@ func adoptRepository(ctx models.DBContext, repoPath string, u *models.User, repo
 			repo.DefaultBranch = setting.Repository.DefaultBranch
 		} else if hasMaster {
 			repo.DefaultBranch = "master"
+		} else if hasMain {
+			repo.DefaultBranch = "main"
 		} else if len(branches) > 0 {
 			repo.DefaultBranch = branches[0]
 		} else {
diff --git a/routers/private/hook.go b/routers/private/hook.go
index 1b9ab000e4..34e849f6f7 100644
--- a/routers/private/hook.go
+++ b/routers/private/hook.go
@@ -412,8 +412,8 @@ func HookPostReceive(ctx *macaron.Context, opts private.HookOptions) {
 				RepoName:     repoName,
 			}
 			updates = append(updates, &option)
-			if repo.IsEmpty && option.IsBranch() && option.BranchName() == "master" {
-				// put the master branch first
+			if repo.IsEmpty && option.IsBranch() && (option.BranchName() == "master" || option.BranchName() == "main") {
+				// put the master/main branch first
 				copy(updates[1:], updates)
 				updates[0] = &option
 			}
diff --git a/services/mirror/mirror.go b/services/mirror/mirror.go
index a2acb6f363..328e23ad2f 100644
--- a/services/mirror/mirror.go
+++ b/services/mirror/mirror.go
@@ -521,6 +521,7 @@ func checkAndUpdateEmptyRepository(m *models.Mirror, gitRepo *git.Repository, re
 
 	hasDefault := false
 	hasMaster := false
+	hasMain := false
 	defaultBranchName := m.Repo.DefaultBranch
 	if len(defaultBranchName) == 0 {
 		defaultBranchName = setting.Repository.DefaultBranch
@@ -540,6 +541,7 @@ func checkAndUpdateEmptyRepository(m *models.Mirror, gitRepo *git.Repository, re
 
 		hasDefault = hasDefault || name == defaultBranchName
 		hasMaster = hasMaster || name == "master"
+		hasMain = hasMain || name == "main"
 	}
 
 	if len(firstName) > 0 {
@@ -547,6 +549,8 @@ func checkAndUpdateEmptyRepository(m *models.Mirror, gitRepo *git.Repository, re
 			m.Repo.DefaultBranch = defaultBranchName
 		} else if hasMaster {
 			m.Repo.DefaultBranch = "master"
+		} else if hasMain {
+			m.Repo.DefaultBranch = "main"
 		} else {
 			m.Repo.DefaultBranch = firstName
 		}