diff --git a/modules/templates/util_render.go b/modules/templates/util_render.go
index a26c0531f81d..d23103ce1bc5 100644
--- a/modules/templates/util_render.go
+++ b/modules/templates/util_render.go
@@ -81,16 +81,16 @@ func RenderCommitMessageLinkSubject(ctx context.Context, msg, urlPrefix, urlDefa
 
 // RenderCommitBody extracts the body of a commit message without its title.
 func RenderCommitBody(ctx context.Context, msg, urlPrefix string, metas map[string]string) template.HTML {
-	msgLine := strings.TrimRightFunc(msg, unicode.IsSpace)
+	msgLine := strings.TrimSpace(msg)
 	lineEnd := strings.IndexByte(msgLine, '\n')
 	if lineEnd > 0 {
 		msgLine = msgLine[lineEnd+1:]
 	} else {
-		return template.HTML("")
+		return ""
 	}
 	msgLine = strings.TrimLeftFunc(msgLine, unicode.IsSpace)
 	if len(msgLine) == 0 {
-		return template.HTML("")
+		return ""
 	}
 
 	renderedMessage, err := markup.RenderCommitMessage(&markup.RenderContext{
diff --git a/modules/templates/util_render_test.go b/modules/templates/util_render_test.go
new file mode 100644
index 000000000000..29d3ed3a56c4
--- /dev/null
+++ b/modules/templates/util_render_test.go
@@ -0,0 +1,56 @@
+// Copyright 2023 The Gitea Authors. All rights reserved.
+// SPDX-License-Identifier: MIT
+
+package templates
+
+import (
+	"context"
+	"html/template"
+	"testing"
+
+	"github.com/stretchr/testify/assert"
+)
+
+func TestRenderCommitBody(t *testing.T) {
+	type args struct {
+		ctx       context.Context
+		msg       string
+		urlPrefix string
+		metas     map[string]string
+	}
+	tests := []struct {
+		name string
+		args args
+		want template.HTML
+	}{
+		{
+			name: "multiple lines",
+			args: args{
+				ctx: context.Background(),
+				msg: "first line\nsecond line",
+			},
+			want: "second line",
+		},
+		{
+			name: "multiple lines with leading newlines",
+			args: args{
+				ctx: context.Background(),
+				msg: "\n\n\n\nfirst line\nsecond line",
+			},
+			want: "second line",
+		},
+		{
+			name: "multiple lines with trailing newlines",
+			args: args{
+				ctx: context.Background(),
+				msg: "first line\nsecond line\n\n\n",
+			},
+			want: "second line",
+		},
+	}
+	for _, tt := range tests {
+		t.Run(tt.name, func(t *testing.T) {
+			assert.Equalf(t, tt.want, RenderCommitBody(tt.args.ctx, tt.args.msg, tt.args.urlPrefix, tt.args.metas), "RenderCommitBody(%v, %v, %v, %v)", tt.args.ctx, tt.args.msg, tt.args.urlPrefix, tt.args.metas)
+		})
+	}
+}