自動マージ
- プラン: Free、Premium、Ultimate
- 提供形態: GitLab.com、GitLab Self-Managed、GitLab Dedicated
マージリクエストの内容をマージする準備ができている場合は、自動マージに設定を選択できます。必要なチェックがすべて正常に完了すると、マージリクエストは自動的にマージされます。したがって、マージリクエストを手動でマージすることを覚えておく必要はありません。
マージチェックを使用すると、マージリクエストの内容のレビューに集中し、プロジェクト設定を使用してマージ可能性を判断できます。マージリクエストをレビューする際に、マージリクエストの変更を承認する場合は、自動マージに設定します。GitLabはプロジェクト設定を適用し、マージリクエストがすべてのマージチェック(必須のコードオーナーや承認ルールなど)を満たすまで、マージできません。必要なマージチェックをすべて満たすと、マージリクエストがマージされます。ユーザーによる操作は不要です。
マージチェックには、合格したCI/CDパイプラインや、次のようなその他多くのものが含まれます:
- 必要な承認がすべて付与されている必要があります。
- 他のマージリクエストがこのマージリクエストをブロックしていません。
- マージコンフリクトが存在していません。
- CI/CDパイプラインが、プロジェクト設定に関係なく、正常に完了しています。
- すべてのディスカッションが解決されています。
- マージリクエストがドラフトではありません。
- すべての外部ステータスチェックに合格しています。
- マージリクエストが開いてる必要があります。
- 拒否されたポリシーが存在していません。
- プロジェクトでマージリクエストがJiraのイシューを参照する必要がある場合、マージリクエストのタイトルまたは説明にJiraのイシューリンクが含まれます。
- マージリクエストにMerge after(Merge after)の日付が設定されている場合、現在の時刻は設定された日付以降である必要があります。
チェックの完全なリストとそのAPI相当のものについては、マージステータスを参照してください。
自動マージを設定した後、マージリクエストのマージ時に自動クローズするイシューを変更することはできません。
マージリクエストを自動マージする
前提要件:
- プロジェクトのデベロッパーロール以上を持っている必要があります。
- プロジェクトの設定で必要な場合、マージリクエストのすべてのスレッドを解決する必要があります。
- マージリクエストは、必要な承認をすべて受けている必要があります。
コマンドラインからプッシュするときにこれを行うには、merge_request.merge_when_pipeline_succeedsプッシュオプションを使用します。
GitLabユーザーインターフェースからこれを行うには、以下の手順を実行します:
左側のサイドバーで、検索または移動先を選択して、プロジェクトを見つけます。
コード > マージリクエストを選択します。
編集するマージリクエストを選択します。
マージリクエストレポートセクションまでスクロールします。
オプション。ソースブランチを削除、コミットをスカッシュ、コミットメッセージを編集など、必要なマージオプションを選択します。
マージリクエストレポートセクションの内容を確認してください。Issue closing patternが含まれている場合は、マージリクエストのマージ時にイシューをクローズする必要があることを確認します:
自動マージに設定を選択します。
自動マージに設定した後、パイプラインが完了する前にマージリクエストにコメントした場合、既存のすべてのスレッドを解決するまでマージはブロックされます。
自動マージをキャンセルする
マージリクエストの自動マージをキャンセルできます。
前提要件:
- マージリクエストの作成者であるか、デベロッパーロール以上のプロジェクトメンバーである必要があります。
- マージリクエストのパイプラインがまだ進行中である必要があります。
これを行うには、次の手順を実行します:
- 左側のサイドバーで、検索または移動先を選択して、プロジェクトを見つけます。
- コード > マージリクエストを選択します。
- 目的のマージリクエストを選択します。
- マージリクエストレポートセクションまでスクロールします。
- 自動マージのキャンセルを選択します。
自動マージのパイプラインの成功
パイプラインが成功すると、マージリクエストがマージされます。パイプラインが失敗した場合、作成者は失敗したジョブを再試行するか、次のように新しいコミットをプッシュして失敗を修正できます:
- 再試行されたジョブが2回目の試行で成功した場合、マージリクエストがマージされます。
- マージリクエストに新しいコミットを追加すると、GitLabはリクエストをキャンセルし、マージ前に新しい変更がレビューされるようにします。
- マージリクエストのターゲットブランチに新しいコミットを追加し、プロジェクトが高速早送りのマージリクエストのみを許可している場合、GitLabはマージコンフリクトを防ぐためにリクエストをキャンセルします。
パイプラインのステータスをより厳密に制御するために、マージ前にパイプラインの成功を必須とすることもできます。
マージに成功したパイプラインを必須にする
マージする前に、完全に成功したパイプラインを必須とするようにプロジェクトを設定できます。この設定は次の両方で機能します:
- GitLab CI/CDパイプライン。
- 外部CIインテグレーションから実行されるパイプライン。
その結果、GitLab CI/CDパイプラインを無効にすると、この機能は無効にならなくなります。しかし、外部CIプロバイダーからのパイプラインをこの機能で使用することはできます。
前提要件:
- プロジェクトのCI/CD設定が、すべてのマージリクエストに対してパイプラインを実行することを確認します。
- プロジェクトのメンテナーロール以上を持っている必要があります。
この設定を有効にするには、次の手順を実行します:
- 左側のサイドバーで、検索または移動先を選択して、プロジェクトを見つけます。
- 設定 > マージリクエストを選択します。
- マージチェックまでスクロールし、パイプラインが完了しているを選択します。この設定では、パイプラインがない場合にマージリクエストのマージも防がれます。したがって、一部のルールと競合する可能性があります。
- 保存を選択します。
同じマージリクエストに対して複数のパイプラインタイプが実行される場合、マージリクエストパイプラインは他のパイプラインタイプよりも優先されます。たとえば、古いが成功したマージリクエストパイプラインでは、新しく失敗したブランチパイプラインがあるにもかかわらず、マージリクエストをマージできます。
スキップされたパイプラインの後にマージを許可する
プロジェクトにパイプラインが完了しているを設定すると、スキップされたパイプラインによってマージリクエストがマージされなくなります。
前提要件:
- プロジェクトのメンテナーロール以上を持っている必要があります。
この動作を変更するには、次の手順を実行します:
- 左側のサイドバーで、検索または移動先を選択して、プロジェクトを見つけます。
- 設定 > マージリクエストを選択します。
- マージチェックの下で:
- パイプラインが完了しているを選択します。
- スキップしたパイプラインは成功と見なされますを選択します。
- 保存を選択します。
特定の日付より前のマージを禁止する
マージリクエストを特定の日時より前にマージすべきでない場合は、マージ開始日時を設定します。この値は、マージ(またはマージトレイン)をいつ開始できるかを設定します。ただし、マージの正確な時間は、他のマージチェックの満足度やマージトレインの長さに応じて異なる場合があります。
前提要件:
- プロジェクトのデベロッパーロール以上を持っている必要があります。
これを行うには、次の手順を実行します:
- 左側のサイドバーで、検索または移動先を選択して、プロジェクトを見つけます。
- コード > マージリクエストを選択します。
- 編集するマージリクエストを選択します。
- 編集を選択します。
- マージ開始日時ドロップダウンリストから、
After scheduled dateを選択し、日時を選択します。 - 変更を保存を選択します。
トラブルシューティング
パイプラインが失敗していないにもかかわらず、マージリクエストをマージできない
場合によっては、マージにパイプラインの成功を必須にさせることが可能であるにもかかわらず、失敗したパイプラインがないマージリクエストをマージできないことがあります。この設定では、失敗したパイプラインがないことではなく、成功したパイプラインがあることが必要となります。パイプラインがまったくないマージリクエストは、成功したパイプラインがあると見なされず、マージできません。
この設定を有効にする場合は、rulesまたはworkflow:rulesを使用して、すべてのマージリクエストに対してパイプラインが実行されるようにします。
パイプラインが失敗しているにもかかわらず、マージリクエストをマージできる
場合によっては、マージにパイプラインの成功を必須にさせることが可能であるのにもかかわらず、失敗したパイプラインでマージリクエストをマージできることがあります。
マージリクエストパイプラインは、パイプラインが完了している設定に対して最も高い優先度を持ちます。同じマージリクエストに対して複数のパイプラインタイプが実行される場合、GitLabは成功のためにマージリクエストパイプラインのみをチェックします。
マージリクエストには、次の場合に複数のパイプラインを含めることができます:
rules設定により、1つのマージリクエストパイプラインと1つのブランチパイプラインという、パイプラインの重複が発生します。この場合、最新のマージリクエストパイプラインの状態によって、マージリクエストがマージ可能かどうかが決まり、ブランチパイプラインは決定しません。- マージリクエストと同じブランチをターゲットとする外部ツールによってトリガーされたパイプライン。
すべての場合において、同じマージリクエストに対して複数のパイプラインタイプが発生しないように、CI/CD設定を更新してください。

