GitHub:マージのコミットメッセージが思った形にならない
スカッシュしてマージすると、GitHub は編集できる既定のコミットメッセージを作ります。中身はリポジトリの設定とプルリクのコミットの数によって、プルリクのタイトル、プルリクの説明、コミットの情報のどれかを含みます(GitHub の スカッシュでのマージのメッセージ・2026年10月28日に確認)。マージコミットにも同じように設定する既定のメッセージがあります。
既定のメッセージはどこで決まるか
- スカッシュしてマージ:リポジトリの Settings の Pull Requests の欄、Allow squash merging の下のメニューで、既定のスカッシュのコミットメッセージの形を選びます。既定の形は、プルリクのコミットが1つならそのコミットのタイトルとメッセージ、2つ以上ならプルリクのタイトルとコミットの一覧です。ほかに、プルリクのタイトルだけ、プルリクのタイトルとコミットの詳細、プルリクのタイトルと説明を選べます(GitHub の プルリクのコミットのスカッシュの設定)。
- マージコミット:Allow merge commits の下では、既定のメッセージはプルリクの番号とタイトルを含みます(例:
Merge pull request #123 from patch-1)。ほかに、プルリクのタイトルだけ、プルリクのタイトルと説明を選べます(GitHub の プルリクのコミットのマージの設定)。 - リベースしてマージ:head のブランチのコミットを1つずつ、マージコミットを作らずにマージ先へ足します(Rebase and merge が使えないを参照)。
- API では:リポジトリの更新で、
squash_merge_commit_title(PR_TITLE、またはCOMMIT_OR_PR_TITLE=コミットが1つならそのコミットのタイトル、2つ以上ならプルリクのタイトル)、squash_merge_commit_message(PR_BODY・COMMIT_MESSAGES・BLANK)、merge_commit_title(PR_TITLE、またはMERGE_MESSAGE=Merge pull request #123 from branch-name のような昔ながらのタイトル)、merge_commit_message(PR_BODY・PR_TITLE・BLANK)で既定を決めます(GitHub の リポジトリの更新)。
思った形にならない理由
- コミットが1つか複数か:既定の形では、コミットが1つのプルリクのスカッシュはそのコミットのタイトルとメッセージを、2つ以上のプルリクのスカッシュはプルリクのタイトルとコミットの一覧を使います。2つ目のコミットが入ったプルリクは、既定も変わります。
- このリポジトリは別の形:Allow squash merging と Allow merge commits の下のメニューが、マージする人に出す既定のメッセージの形を決めます。
- マージのときに書き換えた:GitHub の画面では、求められたらコミットメッセージを書くか、既定のメッセージをそのまま使います(GitHub の プルリクのマージ)。
- API でマージした:REST のマージは、自動のコミットメッセージのタイトルになる
commit_titleと、自動のコミットメッセージに足す詳細のcommit_messageを受け取ります(GitHub の プルリクのマージ)。非同期のマージでは、どちらも直接のマージでだけ使えます。GraphQL のmergePullRequestはcommitHeadlineとcommitBodyを受け取り、省くと既定のメッセージを使います(GitHub の mergePullRequest)。 - 自動マージとマージキュー:自動マージは、オンにしたときに渡したコミットのタイトルと本文を使い、省いたときは既定のメッセージを使います。マージキューでマージするときは、渡したコミットのタイトルやメッセージは無視され、マージキューが決めます(GitHub の enablePullRequestAutoMerge と AutoMergeRequest・マージキューでのマージも参照)。
どうするか
- 設定を見る:リポジトリの Settings の General の Pull Requests、Allow squash merging と Allow merge commits の下のメニューです。設定を変えられる人が、別の形を選べます。
- マージのときに書く:マージの欄でタイトルとメッセージを書き換えるか、REST のマージに
commit_titleとcommit_message、GraphQL のマージにcommitHeadlineとcommitBodyを渡します。 - 共同作者:
Co-authored-byの行はコミットメッセージの一部です。スカッシュでマージする前に、できるコミットのメッセージにその行があるかを見ます(共同作者が数えられないを参照)。 - コミットメッセージの規則:スカッシュでのマージでは、コミットメッセージのブランチの規則は、できたコミットを調べます(コミットのメタデータの規則を参照)。
IntelliJ IDEA で GitHub のプルリクを見るなら
Lesstep の Pull Request Inbox for GitHub は、JetBrains IDE(2024.1 以降)のプラグインです。プルリクのレビュー・チェック・会話を差分の隣に並べ、対象のブランチが許す方法でマージします。マージの画面には、マージコミットとスカッシュのためのコミットのタイトルの欄があり、書いた物をコミットのタイトルとして送ります。空なら GitHub の既定のタイトルになります。コミットメッセージは送らないので、残りは GitHub の自動のメッセージです。リベースしてマージとマージキューでは、この欄はオフです。受信箱・差分・会話は無料、承認・コメント・解決・マージは Pro(月 US$1.50・30日間の無料試用つき)です。画面は日本語です。
GitHub は GitHub, Inc. の商標、IntelliJ IDEA は JetBrains s.r.o. の商標です。このページは GitHub, Inc.・JetBrains のいずれとも提携しておらず、承認も受けていません。
ほかに:GitHub のマージの断り(405・409) · GitHub のレビューの断り(422) · GitHub の検索の 422「Validation Failed」 · 「Resource not accessible by personal access token」 · 401「Bad credentials」 · 「Resource protected by organization SAML enforcement」 · 「API rate limit exceeded」 · GitHub の差分の 406「too_large」・3,000件 · GitHub の行のコメントの 422「must be part of the diff」 · GitHub のブランチの更新の断り(422) · GitHub のプルリクが作れない(422・403) · GitHub の自動マージの断り · GitHub の下書き・レビュー準備完了・閉じるの断り · GitHub の会話の解決の断り · GitHub のチェックが出ない(check runs の 403) · GitHub のファイルの中身が読めない · GitHub の比較の断り(404・422) · GitHub のコメント・返信の断り(ロック・アーカイブの 403) · GitHub のマージの方法の断り(405) · GitHub のブランチが見つからない(404・301) · GitHub Enterprise Server につながらない · GitHub のレビューの依頼が出ない · GitHub のプルリクの一覧が足りない · GitHub の 404・名前を変えたリポジトリ(301・307) · GitHub の行のコメントが outdated・差分に無い · GitHub のプルリクの更新・通知が遅い · GitHub の変更の提案が適用できない · GitHub の必須チェックが Expected のまま · GitHub でコードオーナーのレビューが要る · GitHub で未解決の会話がマージを止める · GitHub で署名の無いコミットがマージを止める · GitHub のマージキューでマージするブランチ · GitHub でマージが最後の push の承認を待っている · GitHub でマージがコードスキャンの結果を待っている · GitHub でマージがコード品質の結果を待っている · GitHub でコードのカバレッジの水準がマージを止める · GitHub でライセンスの適合の結果がマージを止める · GitHub でブランチのロックや更新の制限がマージを止める · GitHub でマージの後にブランチが消えない · GitHub でチームの承認(Required reviewers)がマージを止める · GitHub でシークレットスキャンのアラートがマージを止める · GitHub でスタックしたプルリクがマージできない · GitHub で push の規則が push を止める · GitHub でコミットのメタデータの規則がマージを止める · GitHub で強制 push が止められる · GitHub でプルリクをマージしても issue が閉じない · GitHub のプルリクを手元にチェックアウトできない · GitHub のプルリクがマージ先と衝突している · GitHub で変更を依頼された・レビューを取り消す · GitHub で共同作者がコミットに数えられない · GitHub で依存関係のレビューのチェックが失敗する · GitHub で Dependabot がプルリクをリベースしない · GitHub でフォークが同期できない · GitHub でプルリクのベースのブランチを変えられない · GitHub でプルリクを取り消せない · GitHub でプルリクのテンプレートが出ない · GitHub でプルリクにラベルや担当者が付かない · GitHub でプルリクを閉じられない・開き直せない · GitHub でプッシュ保護にプッシュを止められた · GitHub でプルリクのコメントが隠された · GitHub でデプロイが成功するまでプルリクをマージできない · GitHub でチームに頼んだレビューがメンバーに置き換わった · GitHub でプルリクのファイルの Viewed が外れた · GitHub でマージしていないプルリクがマージ済みになった · GitHub で Copilot のレビューが承認に数えられない · GitHub でワークフローが作ったプルリクのチェックが動かない · GitHub でプルリクに Update branch のボタンが出ない · GitHub で Dependabot のプルリクのチェックが失敗する · GitHub でフォークからのプルリクのチェックが失敗する · GitHub でコミットメッセージの [skip ci] でチェックが動かない · GitHub で保存期間を過ぎてチェックが消えた · GitHub の公開リポジトリのコードレビューの制限 · GitHub でリポジトリのプルリクがオフ・制限されている · GitHub でスタックのプルリクごとにチェックが走る · GitHub でスカッシュでマージ済みのコミットが次のプルリクに出る · GitHub のプルリクでファイルの差分が出ない · GitHub でフォークのプルリクのブランチに push できない · GitHub のプルリクのチェックが取り消された · GitHub で Rebase and merge が使えない · GitHub のプルリクでファイルの全行が変わったと出る · GitHub の API がタイムアウトした · GitHub のプルリクで画像や文書の差分が見た目で出ない · GitHub のレビューの依頼が断られる(422) · GitHub で Copilot が作ったプルリクのチェックが動かない・承認が数えられない · GitHub の push が GH006・GH013 で断られる · GitHub で承認が足りずマージできない・数に入らない承認 · JetBrains の IDE で GitHub のプルリクを扱う · English