ドキュメントには頻繁に更新が加えられ、その都度公開されています。本ページの翻訳はまだ未完成な部分があることをご了承ください。最新の情報については、英語のドキュメンテーションをご参照ください。本ページの翻訳に問題がある場合はこちらまでご連絡ください。
記事のバージョン: GitHub.com

GitHub上のマージ方法について

リポジトリへのプッシュアクセスを持つコントリビューターに対し、GitHub上でプルリクエストを様々なマージオプションでマージすることを許可するか、リポジトリへのすべてのプルリクエストに特定のマージ方法を強制することができます。

GitHub 上でプルリクエストのマージオプションを設定して、ワークフローの要求と Git の履歴管理への要望を満たすことができます。 コミットsquashingあるいはリベースのようなマージの1つの種類を、リポジトリでその方法だけを有効化することで強制できます。

GitHub 上のプルリクエストでデフォルトの [Merge pull request(プルリクエストのマージ)] をクリックすると、フィーチャブランチのすべてのコミットがマージコミット中でベースブランチに追加されます。プルリクエストは --no-ffオプションを使ってマージされます。

プルリクエストをマージするには、リポジトリの書き込み権限が必要です。

[standard-merge-commit-diagram]

マージコミットのsquash

GitHub 上のプルリクエストの [Squash and merge] オプションを選択した場合、プルリクエストのコミットは単一のコミットに squash されます。コミット群はトピックブランチからのすべてのコントリビューターの個々のコミットとしてではなく、1 つのコミットとしてまとめられ、デフォルトブランチにマージされます。squash されたコミットを持つプルリクエストはfast-forward オプションを使ってマージされます。

プルリクエストを squash してマージするには、リポジトリの書き込み権限が必要で、リポジトリは squash マージを許可していなければなりません。

commit-squashing-diagram

squash とマージを使って、リポジトリの Git の履歴をスムーズにすることができます。作業途中でのコミットはフィーチャブランチでの作業の際には役立ちますが、必ずしも Git の履歴として残すことは重要ではありません。デフォルトのブランチの際にそれらのコミットを 1 つのコミットに squash すれば、オリジナルの変更を明快な Git の履歴で残すことができます。

コミットの squash を有効化する前に、以下の欠点について考慮してください:

詳しい情報についてはプルリクエストのためのコミットsquashingの設定を参照してください。

リベースとコミットのマージ

GitHub 上のプルリクエストで [Rebase and merge] オプションを選択すると、トピックブランチ (あるいは head ブランチ) からのすべてのコミットは、マージコミットなしに個別にベースブランチへと追加されます。リベースされたコミットを持つプルリクエストは、fast-forward オプションを使ってマージされます。

プルリクエストをリベースしてマージするには、リポジトリの書き込み権限を持っていなければならず、リポジトリは リベースマージを許可していなければなりません。

GitHub 上のリベースとマージの動作は、git rebase とはやや異なります。GitHub 上のリベースとマージは、常にコミッタの情報を更新し、新しいコミット SHA を作成しますが、GitHub 外の git rebase は先祖のコミット上でリベースが行われたときにコミッタの情報を変更しません。git rebase に関する詳しい情報については、書籍 Pro Git の "Git rebase" の章を参照してください。

git rebase のビジュアルな表現については書籍 Pro Git の "Git のブランチ機能 - リベースを参照してください。

コミットのリベースを有効化する前に、以下の欠点について考慮してください:

詳しい情報についてはプルリクエストのためのコミットのリベースの設定を参照してください。

担当者にお尋ねください

探しているものが見つからなかったでしょうか?

弊社にお問い合わせください