{"record":{"id":"553f121557668394","repo":"theonedev/onedev","slug":"error-checking-merge-commit-message-errormessag","errorCode":null,"errorMessage":"Error checking merge commit message: ${errorMessage}","messagePattern":"Error checking merge commit message: (.+?)","errorType":"validation","errorClass":"NotAcceptableException","httpStatus":400,"severity":"error","filePath":"server-core/src/main/java/io/onedev/server/service/impl/DefaultPullRequestService.java","lineNumber":359,"sourceCode":"\n\t\tPullRequestChange change = new PullRequestChange();\n\t\tchange.setData(new PullRequestDiscardData());\n\t\tchange.setRequest(request);\n\t\tchange.setUser(user);\n\t\tchangeService.create(change, note);\n\n\t\tpendingSuggestionApplyService.discard(null, request);\n\t}\n\n\t@Transactional\n\t@Override\n\tpublic void merge(User user, PullRequest request, @Nullable String commitMessage) {\n        var errorMessage = request.checkMergeCondition();\n        if (errorMessage != null)\n            throw new NotAcceptableException(errorMessage);\n        errorMessage = request.checkMergeCommitMessage(user, commitMessage);\n        if (errorMessage != null)\n            throw new NotAcceptableException(\"Error checking merge commit message: \" + errorMessage);\n\n\t\tMergePreview mergePreview = checkNotNull(request.checkMergePreview());\n\t\tObjectId mergeCommitId = ObjectId.fromString(checkNotNull(mergePreview.getMergeCommitHash()));\n        PersonIdent person = user.asPerson();\n\n\t\tProject project = request.getTargetProject();\n\t\tMergeStrategy mergeStrategy = mergePreview.getMergeStrategy();\n\n\t\tif (mergeStrategy == CREATE_MERGE_COMMIT\n\t\t\t\t|| mergeStrategy == SQUASH_SOURCE_BRANCH_COMMITS\n\t\t\t\t|| mergeStrategy == CREATE_MERGE_COMMIT_IF_NECESSARY\n\t\t\t\t\t\t&& !mergeCommitId.name().equals(mergePreview.getHeadCommitHash())) {\n\t\t\tPersonIdent author;\n\t\t\tif (mergeStrategy != SQUASH_SOURCE_BRANCH_COMMITS)\n\t\t\t\tauthor = person;\n\t\t\telse\n\t\t\t\tauthor = null;\n\t\t\tif (commitMessage == null)","sourceCodeStart":341,"sourceCodeEnd":377,"githubUrl":"https://github.com/theonedev/onedev/blob/d44925c47c37992c828ea673a5f9620539bc3ff2/server-core/src/main/java/io/onedev/server/service/impl/DefaultPullRequestService.java#L341-L377","documentation":"merge throws \"Error checking merge commit message: <reason>\" when PullRequest.checkMergeCommitMessage(user, commitMessage) rejects the supplied commit message. This runs when the merge strategy requires a merge commit message and the branch protection of the target branch enforces commit message rules (pattern/length), validated via branchProtection.checkCommitMessage.","triggerScenarios":"Calling DefaultPullRequestService.merge(user, commitMessage) with a commitMessage that violates the target branch's protection rules when isMergeCommitMessageRequired() is true (merge strategy SQUASH_SOURCE_BRANCH_COMMITS or CREATE_MERGE_COMMIT, or a necessary merge commit). Also fires via checkAutoMerge when the configured auto-merge commit message is non-compliant.","commonSituations":"Branch protection requires commit messages matching a regex and the caller passes a plain message; auto-merge configured with a commit message template that fails branch protection; squash merges omitting required message elements.","solutions":["Supply a commitMessage that satisfies the target branch's branch-protection commit message rules","Pass null to use getDefaultMergeCommitMessage() if that default passes the rules","Fix the auto-merge configuration so its commit message complies with branch protection","Pre-check request.checkMergeCommitMessage(user, commitMessage) == null before merging"],"exampleFix":"// before\nprService.merge(user, \"update\"); // 400: message fails branch protection pattern\n// after\nString msg = request.checkMergeCommitMessage(user, \"update\") == null\n        ? \"update\"\n        : request.getDefaultMergeCommitMessage();\nprService.merge(user, msg);","handlingStrategy":"validation","validationCode":"String err = request.checkMergeCommitMessage(user, commitMessage);\nboolean messageOk = err == null;","typeGuard":null,"tryCatchPattern":"try {\n    prService.merge(user, commitMessage);\n} catch (NotAcceptableException e) {\n    // message begins with \"Error checking merge commit message:\"\n}","preventionTips":["Match the target branch's commit message rules when composing messages","Use getDefaultMergeCommitMessage() when unsure","Keep auto-merge commit message templates compliant with branch protection"],"tags":["pull-request","merge","commit-message","branch-protection"],"backgroundTag":"invalid-state-transition","analyzedSha":"d44925c47c37992c828ea673a5f9620539bc3ff2","analyzedAt":"2026-09-06T07:18:27.995Z","contentChangedAt":"2026-09-06T07:18:27.995Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}