GitHub: the merge commit message is not what you expected
When you squash and merge, GitHub generates a default commit message that you can edit. It can include the pull request title, the pull request description or commit information, depending on the repository settings and the number of commits in the pull request (GitHub's merge message for a squash merge, checked October 28, 2026). A merge commit has a default message of its own, set the same way.
Where the default comes from
- Squash and merge: under Allow squash merging, in the Pull Requests section of the repository's Settings, a dropdown sets the format of the default squash commit message. The default message uses the commit title and message if the pull request contains only 1 commit, or the pull request title and list of commits if it contains 2 or more; the other choices are the pull request title, the pull request title and commit details, or the pull request title and description (GitHub's configuring commit squashing for pull requests).
- Merge commit: under Allow merge commits, the default message includes the pull request number and title, for example
Merge pull request #123 from patch-1; the other choices are the pull request title, or the pull request title and description (GitHub's configuring commit merging for pull requests). - Rebase and merge: adds each commit of the head branch onto the base branch individually, without a merge commit (see Rebase and merge not available).
- In the API: updating a repository sets the defaults with
squash_merge_commit_title(PR_TITLE, orCOMMIT_OR_PR_TITLE: the commit title if there is only one commit, the pull request title when there are more),squash_merge_commit_message(PR_BODY,COMMIT_MESSAGESorBLANK),merge_commit_title(PR_TITLE, orMERGE_MESSAGE: the classic title such as Merge pull request #123 from branch-name) andmerge_commit_message(PR_BODY,PR_TITLEorBLANK) (GitHub's update a repository).
Why it came out differently
- One commit or many: with the default format, a squash of a pull request with one commit takes that commit title and message, and a squash of one with two or more takes the pull request title and the list of commits. A pull request that gets a second commit gets another default.
- Another format in this repository: the dropdowns under Allow squash merging and Allow merge commits set the format of the default message presented to contributors when they merge.
- Edited when merging: on GitHub, you type a commit message when prompted, or accept the default message (GitHub's merging a pull request).
- Merged through the API: the REST merge takes
commit_title, the title for the automatic commit message, andcommit_message, extra detail to append to the automatic commit message (GitHub's merge a pull request); in the asynchronous merge, both are only supported for direct merges. In GraphQL,mergePullRequesttakescommitHeadlineandcommitBody, and if they are omitted a default message is used (GitHub's mergePullRequest). - Auto-merge and the merge queue: auto-merge keeps the commit headline and body given when it was turned on, and uses a default message when they were omitted; when merging with a merge queue, any commit headline or message given is ignored, and the merge queue sets it (GitHub's enablePullRequestAutoMerge and AutoMergeRequest; see merging through a merge queue).
What to do
- See the setting: in the repository's Settings, General, Pull Requests, the dropdowns under Allow squash merging and Allow merge commits; someone who can change the settings can pick another format.
- Write it when merging: edit the title and message in the merge box, or pass
commit_titleandcommit_messageto the REST merge, orcommitHeadlineandcommitBodyto the GraphQL one. - Co-authors: the
Co-authored-bylines are part of the commit message, so before a squash merge, check that they are in the message of the commit that lands (see a co-author not credited). - Commit message rules: for a squash merge, a branch rule on commit messages checks the resulting commit (see commit metadata rules).
GitHub pull requests in IntelliJ IDEA
Pull Request Inbox for GitHub, a plugin by Lesstep for JetBrains IDEs 2024.1 or later, shows a pull request's reviews, checks and conversations next to the diff, and merges it with the methods the target branch allows. Its merge dialog has a commit title field for a merge commit or a squash, which it sends as the commit title, and left empty GitHub's default title is used; it sends no commit message, so the rest of the message is GitHub's automatic one. The field is off for Rebase and merge and for the merge queue. The review inbox, diffs and conversations are free; approving, commenting, resolving and merging are Pro (US$1.50 a month, with a 30-day trial).
GitHub is a trademark of GitHub, Inc.; IntelliJ IDEA is a trademark of JetBrains s.r.o. This page is not affiliated with or endorsed by GitHub, Inc. or JetBrains.
More: GitHub merge refused (405, 409) · GitHub review refused (422) · GitHub search 422 "Validation Failed" · "Resource not accessible by personal access token" · 401 "Bad credentials" · "Resource protected by organization SAML enforcement" · "API rate limit exceeded" · GitHub diff 406 "too_large", 3,000 files · GitHub line comment 422 "must be part of the diff" · GitHub branch update refused (422) · GitHub pull request not created (422, 403) · GitHub auto-merge refused · GitHub draft, ready for review or close refused · GitHub conversation not resolved · GitHub checks not shown (check runs 403) · GitHub file contents not read · GitHub compare refused (404, 422) · GitHub comment or reply refused (403 locked, archived) · GitHub merge method not allowed (405) · GitHub branch not found (404, 301) · GitHub Enterprise Server not reached · GitHub review request not shown · GitHub pull request list incomplete · GitHub 404 Not Found, renamed repositories (301, 307) · GitHub line comment outdated or not on the diff · GitHub pull requests not updating, notifications late · GitHub suggested change cannot be applied · GitHub required check stuck at "Expected" · GitHub code owner review required · GitHub merge blocked by unresolved conversations · GitHub merge blocked by unsigned commits · GitHub branch that merges through a merge queue · GitHub merge waiting for an approval of the most recent push · GitHub merge waiting for code scanning results · GitHub merge waiting for code quality results · GitHub merge blocked by a code coverage threshold · GitHub merge blocked by license compliance results · GitHub branch locked or its updates restricted · GitHub branch not deleted after merging · GitHub merge waiting for a team's approval (Required reviewers) · GitHub merge blocked by secret scanning alerts · GitHub stacked pull request not merging · GitHub push blocked by push rules · GitHub merge blocked by commit metadata rules · GitHub force push blocked · GitHub issue not closed by a merged pull request · GitHub pull request not checked out locally · GitHub pull request has merge conflicts · GitHub changes requested and dismissing a review · GitHub co-author not credited for a commit · GitHub dependency review check failed · GitHub Dependabot not rebasing its pull request · GitHub fork not syncing with upstream · GitHub pull request base branch not changing · GitHub pull request not reverting · GitHub pull request template not showing · GitHub pull request labels or assignees not added · GitHub pull request not closing or reopening · GitHub push blocked by push protection · GitHub pull request comment hidden · GitHub pull request blocked until deployments succeed · GitHub team review request replaced by members · GitHub pull request file no longer marked Viewed · GitHub pull request marked merged without being merged · GitHub Copilot review does not count as an approval · GitHub checks not running on a pull request a workflow created · GitHub Update branch button not shown on a pull request · GitHub checks failing on a Dependabot pull request · GitHub checks failing on a pull request from a fork · GitHub checks skipped by [skip ci] in a commit message · GitHub checks gone after the retention period · GitHub code review limits in a public repository · GitHub pull requests turned off or limited in a repository · GitHub checks run on every pull request in a stack · GitHub pull request showing commits already squash merged · GitHub pull request not showing a file diff · GitHub push to a pull request branch from a fork refused · GitHub check cancelled on a pull request · GitHub Rebase and merge not available · GitHub pull request shows every line changed · GitHub API request timed out · GitHub pull request image or document diff not shown · GitHub review request refused (422) · GitHub pull request from Copilot: checks not running, approval not counted · GitHub push refused: GH006 and GH013 on a protected branch · GitHub "At least 1 approving review is required", approvals that do not count · GitHub pull request plugins for IntelliJ IDEA, compared · 日本語