diff --git a/options/locale/locale_en-US.ini b/options/locale/locale_en-US.ini
index 824a56c3f9..4ca4063624 100644
--- a/options/locale/locale_en-US.ini
+++ b/options/locale/locale_en-US.ini
@@ -1952,6 +1952,7 @@ pulls.cmd_instruction_checkout_title = Checkout
 pulls.cmd_instruction_checkout_desc = From your project repository, check out a new branch and test the changes.
 pulls.cmd_instruction_merge_title = Merge
 pulls.cmd_instruction_merge_desc = Merge the changes and update on Forgejo.
+pulls.cmd_instruction_merge_warning = <b>Warning:</b> The "Autodetect manual merge" setting is not enabled for this repository, you will have to mark this pull request as manually merged afterwards.
 pulls.clear_merge_message = Clear merge message
 pulls.clear_merge_message_hint = Clearing the merge message will only remove the commit message content and keep generated git trailers such as "Co-Authored-By …".
 pulls.reopen_failed.head_branch = The pull request cannot be reopened, because the head branch doesn't exist anymore.
diff --git a/routers/web/repo/issue.go b/routers/web/repo/issue.go
index cf3d71b197..055fcdc231 100644
--- a/routers/web/repo/issue.go
+++ b/routers/web/repo/issue.go
@@ -1881,6 +1881,8 @@ func ViewIssue(ctx *context.Context) {
 		}
 		prConfig := prUnit.PullRequestsConfig()
 
+		ctx.Data["AutodetectManualMerge"] = prConfig.AutodetectManualMerge
+
 		var mergeStyle repo_model.MergeStyle
 		// Check correct values and select default
 		if ms, ok := ctx.Data["MergeStyle"].(repo_model.MergeStyle); !ok ||
diff --git a/templates/repo/issue/view_content/pull.tmpl b/templates/repo/issue/view_content/pull.tmpl
index 2672bd3389..ca3c6f82e8 100644
--- a/templates/repo/issue/view_content/pull.tmpl
+++ b/templates/repo/issue/view_content/pull.tmpl
@@ -388,7 +388,7 @@
 			{{end}}
 
 			{{if and .Issue.PullRequest.HeadRepo (not .Issue.PullRequest.HasMerged) (not .Issue.IsClosed)}}
-				{{template "repo/issue/view_content/pull_merge_instruction" dict "PullRequest" .Issue.PullRequest "ShowMergeInstructions" .ShowMergeInstructions}}
+				{{template "repo/issue/view_content/pull_merge_instruction" dict "PullRequest" .Issue.PullRequest "ShowMergeInstructions" .ShowMergeInstructions "AutodetectManualMerge" .AutodetectManualMerge}}
 			{{end}}
 		</div>
 	</div>
diff --git a/templates/repo/issue/view_content/pull_merge_instruction.tmpl b/templates/repo/issue/view_content/pull_merge_instruction.tmpl
index 128dfef7f7..b7aae53424 100644
--- a/templates/repo/issue/view_content/pull_merge_instruction.tmpl
+++ b/templates/repo/issue/view_content/pull_merge_instruction.tmpl
@@ -15,7 +15,13 @@
 		<div>git checkout {{$localBranch}}</div>
 	</div>
 	{{if .ShowMergeInstructions}}
-	<div><h3>{{ctx.Locale.Tr "repo.pulls.cmd_instruction_merge_title"}}</h3>{{ctx.Locale.Tr "repo.pulls.cmd_instruction_merge_desc"}}</div>
+	<div id="merge-instructions">
+		<h3>{{ctx.Locale.Tr "repo.pulls.cmd_instruction_merge_title"}}</h3>
+		{{ctx.Locale.Tr "repo.pulls.cmd_instruction_merge_desc"}}
+		{{if not .AutodetectManualMerge}}
+			<p>{{ctx.Locale.Tr "repo.pulls.cmd_instruction_merge_warning"}}</p>
+		{{end}}
+	</div>
 	<div class="ui secondary segment">
 		<div data-pull-merge-style="merge">
 			<div>git checkout {{.PullRequest.BaseBranch}}</div>
diff --git a/tests/integration/pull_test.go b/tests/integration/pull_test.go
index ef21c7f533..10dbad2228 100644
--- a/tests/integration/pull_test.go
+++ b/tests/integration/pull_test.go
@@ -7,9 +7,15 @@ import (
 	"net/http"
 	"testing"
 
+	"code.gitea.io/gitea/models/db"
+	repo_model "code.gitea.io/gitea/models/repo"
+	"code.gitea.io/gitea/models/unit"
+	"code.gitea.io/gitea/models/unittest"
+	user_model "code.gitea.io/gitea/models/user"
 	"code.gitea.io/gitea/tests"
 
 	"github.com/stretchr/testify/assert"
+	"github.com/stretchr/testify/require"
 )
 
 func TestViewPulls(t *testing.T) {
@@ -23,3 +29,39 @@ func TestViewPulls(t *testing.T) {
 	placeholder, _ := search.Attr("placeholder")
 	assert.Equal(t, "Search pulls...", placeholder)
 }
+
+func TestPullManuallyMergeWarning(t *testing.T) {
+	defer tests.PrepareTestEnv(t)()
+
+	user2 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2})
+	session := loginUser(t, user2.Name)
+
+	warningMessage := `Warning: The "Autodetect manual merge" setting is not enabled for this repository, you will have to mark this pull request as manually merged afterwards.`
+	t.Run("Autodetect disabled", func(t *testing.T) {
+		defer tests.PrintCurrentTest(t)()
+
+		req := NewRequest(t, "GET", "/user2/repo1/pulls/3")
+		resp := session.MakeRequest(t, req, http.StatusOK)
+
+		htmlDoc := NewHTMLParser(t, resp.Body)
+		mergeInstructions := htmlDoc.Find("#merge-instructions").Text()
+		assert.Contains(t, mergeInstructions, warningMessage)
+	})
+
+	pullRequestUnit := unittest.AssertExistsAndLoadBean(t, &repo_model.RepoUnit{RepoID: 1, Type: unit.TypePullRequests})
+	config := pullRequestUnit.PullRequestsConfig()
+	config.AutodetectManualMerge = true
+	_, err := db.GetEngine(db.DefaultContext).ID(pullRequestUnit.ID).Cols("config").Update(pullRequestUnit)
+	require.NoError(t, err)
+
+	t.Run("Autodetect enabled", func(t *testing.T) {
+		defer tests.PrintCurrentTest(t)()
+
+		req := NewRequest(t, "GET", "/user2/repo1/pulls/3")
+		resp := session.MakeRequest(t, req, http.StatusOK)
+
+		htmlDoc := NewHTMLParser(t, resp.Body)
+		mergeInstructions := htmlDoc.Find("#merge-instructions").Text()
+		assert.NotContains(t, mergeInstructions, warningMessage)
+	})
+}