スカッシュとマージ
- プラン: Free、Premium、Ultimate
- 提供形態: GitLab.com、GitLab Self-Managed、GitLab Dedicated
スカッシュとマージを行うと、複数の小さなコミットが1つの意味のあるコミットに結合されます。この方法により、リポジトリの履歴がクリーンに保たれ、変更の追跡やリバートが容易になります。複数の機能の作業を同時に行う場合でも、スカッシュを使用すると、各機能の変更を明確で論理的な単位に分けることができます。
- 小さなコミットが結合されるため、すべての変更箇所をリバートするが簡単になります。
- 単一のコミットがターゲットブランチにマージされる際には、完全なコミット履歴が保持されます。
- ベースブランチはクリーンな状態に保たれ、意味のあるコミットメッセージが含まれています。
スカッシュとマージのワークフロー
ブランチがベースブランチにマージされるたびに、最大2つのコミットが追加されます:
- ブランチからコミットをスカッシュすることによって作成された単一のコミット。
- マージコミット。ただし、プロジェクトで早送りマージを有効にしている場合は除きます。早送りマージでは追加のマージコミットの作成を防ぎますが、それでもブランチからコミットをスカッシュして単一のコミットにすることができます。
デフォルトでは、スカッシュされたコミットには次のメタデータが含まれています:
- メッセージ: スカッシュコミットの説明、またはカスタマイズされたメッセージ
- 作成者: マージリクエストを作成したユーザー
- コミッター: スカッシュを開始したユーザー
プロジェクトオーナーは、すべてのスカッシュコミットおよびマージコミットの新しいデフォルトメッセージを作成できます。
マージリクエストのデフォルトのスカッシュオプションを設定する
マージリクエストを作成または編集する権限を持つユーザーは、マージリクエストのデフォルトのスカッシュオプションを設定できます。
前提要件:
- プロジェクトがスカッシュを許可または推奨するように設定されている必要があります。
これを行うには、以下を実行します:
- 左側のサイドバーで、検索または移動先を選択して、プロジェクトを見つけます。
- コード > マージリクエストを選択し、マージリクエストを見つけます。
- 編集を選択します。
- Squash commits when merge request is accepted(マージリクエストが承認されたときにコミットをスカッシュする)のチェックボックスをオンまたはオフにします。
- 変更を保存を選択します。
マージリクエスト内でコミットをスカッシュする
プロジェクトでマージリクエストのスカッシュオプションを選択できる場合、マージプロセスの一部としてコミットをスカッシュするには、以下を実行します:
- 左側のサイドバーで、検索または移動先を選択して、プロジェクトを見つけます。
- コード > マージリクエストを選択し、マージリクエストを見つけます。
- マージリクエストウィジェットで、コミットをスカッシュチェックボックスが選択されていることを確認してください。プロジェクトのスカッシュオプションが許可しないまたは必須のいずれかに設定されている場合、このチェックボックスは表示されません。
- オプション。スカッシュコミットメッセージまたはマージコミットメッセージ(プロジェクトの設定によって異なります)を変更するには、コミットメッセージを修正を選択します。
- マージリクエストをマージする準備ができたら、マージを選択します。
プロジェクトのスカッシュオプションを設定する
前提要件:
- このプロジェクトでのメンテナー以上のロールが必要です。
プロジェクト内のすべてのマージリクエストのデフォルトのスカッシュ動作を設定するには、以下を実行します:
- 左側のサイドバーで、検索または移動先を選択して、プロジェクトを見つけます。
- 設定 > マージリクエストを選択します。
- マージ時にコミットをスカッシュするセクションで、次の選択肢から動作を選択します:
- 許可しない: スカッシュは実行されず、オプションは表示されません。
- 許可: スカッシュは許可されていますが、デフォルトではオフになっています。
- 推奨: スカッシュは許可され、デフォルトで選択されていますが、無効にすることができます。
- 必須: スカッシュは常に実行されます。マージリクエストにはスカッシュのオプションが表示されますが、ユーザーは変更できません。
- 変更を保存を選択します。