変更の提案

レビュアーはマージリクエストの diff スレッドで Markdown 構文を使ってコードの変更を提案することができます。マージリクエスト作成者(または適切なロールを持つ他のユーザー)は、GitLab UI から提案の一部または全部を適用することができます。提案を適用すると、変更を提案したユーザーが作成したマージリクエストにコミットが追加されます。

提案の作成

  1. 左のサイドバーで「検索」または「移動」を選択してあなたのプロジェクトを検索します。
  2. コード > マージリクエストを選択し、マージリクエストを見つけてください。
  3. セカンダリメニューで、変更を選択します。
  4. 変更したいコードの行を探します。
    • 1行を選択するには
      • 行番号にカーソルを合わせ、「この行にコメントを追加する」({comment})を選択します。
    • 複数の行を選択するには
      1. 行番号にカーソルを合わせ、「この行にコメントを追加する」({comment})を選択します。
      2. 必要な行がすべて含まれるまで、選択してドラッグします。詳細については、複数行の提案を参照してください。
  5. コメントツールバーで、サジェストの挿入({doc-code}) を選択します。GitLabはこのように、あらかじめ入力されたコードブロックをコメントに挿入します:

    ```suggestion:-0+0
    The content of the line you selected is shown here.
    ```
    
  6. あらかじめ入力されているコードブロックを編集して、あなたの提案を追加します。
  7. レビューを開始する」または「レビューに追加する」を選択してレビューにコメントを追加するか、「今すぐコメントを追加する」を選択してコメントをすぐにスレッドに追加します。

複数行の提案

マージリクエストの差分をレビューする際、1つの提案で複数行(最大200行)の変更を提案することができます:

  • 提案の作成で説明したように、選択してドラッグします。GitLab があなたのために提案ブロックを作成します。
  • 一行を選択し、手動で範囲オフセットを調整します。

提案の最初の行にある範囲オフセットは、選択した行からの相対的な行番号を示しています。このオフセットは、サジェストで置き換える行を指定します。例えば、この提案はコメント行の上3行と下4行をカバーしています:

```suggestion:-3+4
        "--talk-name=ca.desrt.dconf",
        "--socket=wayland",
```

この提案を適用すると、コメント行の上3行から下4行までが置き換えられます:

Multi-line suggestion preview

複数行に対する提案は、コメントされた差分行の_上_100行と_下_100行に制限されます。これにより、1 回の提案で変更できる行数は 200 行までとなります。

リッチテキストエディタの使用

フラグ: セルフマネジメントのGitLabでは、デフォルトでこの機能が利用可能です。この機能を隠すには、管理者がcontent_editor_on_issues という機能フラグを無効にします。GitLab.comでは、この機能は利用可能です。

提案を挿入するとき、WYSIWYGリッチテキストエディタを使って、UIでソースファイルの行番号を上下に移動することができます。

変更された行を追加または削除するには、[From line]の横にある[+]または[-]を選択します。

Multi-line suggestion preview

提案の適用

前提条件:

  • マージリクエストの作成者であるか、プロジェクトの開発者ロールを持っている必要があります。

提案された変更をマージリクエストから直接適用するには:

  1. 左のサイドバーで「検索」または「移動」を選択してあなたのプロジェクトを検索します。
  2. コード > マージリクエストを選択し、マージリクエストを見つけてください。
  3. 適用したい提案を含むコメントを見つけます。
    • 提案を個別に適用するには、[提案を適用] を選択します。
    • 1回のコミットで複数の提案を適用するには、Add suggestion to batchを選択します。
  4. オプションです。変更を説明するカスタムコミットメッセージを指定します。カスタムメッセージを指定しない場合は、デフォルトのコミットメッセージが使用されます。
  5. 適用を選択します。

提案が適用されました:

  • 提案は「適用済み」と表示されます。
  • コメントスレッドは解決されました。
  • GitLab は、変更内容とともに新しいコミットを作成します。
  • ユーザーが Developer ロールを持っている場合、GitLab は提案された変更をマージリクエストのブランチにあるコードベースに直接プッシュします。

コードブロックのネスト

フェンスで囲まれたコードブロックを含む提案を追加するには、提案を3つのバックスティックではなく4つのバックスティックで囲みます:

````suggestion:-0+2
```shell
git config --global receive.advertisepushoptions true
```
````

Output of a comment with a suggestion with a fenced code block

適用された提案のコミットメッセージの設定

GitLabはサジェストを適用する際にデフォルトのコミットメッセージを使用します。このメッセージはプレースホルダをサポートしており、変更することもできます。例えば、2つの異なるファイルに3つの提案を適用した場合、デフォルトのメッセージApply %{suggestions_count} suggestion(s) to %{files_count} file(s) はこのように表示されます:

Apply 3 suggestion(s) to 2 file(s)

フォークから作成されたマージリクエストは、ターゲットプロジェクトで定義されたテンプレートを使用します。

プロジェクトのニーズに合わせて、これらのメッセージをカスタマイズし、他のプレースホルダー変数を含めることができます:

  1. 左のサイドバーで「検索」または「移動」を選択してあなたのプロジェクトを検索します。
  2. 設定 > マージリクエストを選択します。
  3. マージ提案までスクロールし、必要に応じてテキストを変更します。このメッセージで使用できるプレースホルダーのリストについては、サポートされる変数を参照してください。

サポートされている変数

適用済み提案のコミットメッセージテンプレートはこれらの変数をサポートしています:

変数説明出力例
%{branch_name}提案が適用されたブランチの名前。my-feature-branch
%{files_count}提案が適用されたファイルの数。2
%{file_paths}提案が適用されたファイルのパス。パスはカンマで区切られます。docs/index.md, docs/about.md
%{project_path}プロジェクトのパス。my-group/my-project
%{project_name}プロジェクト名。My Project
%{suggestions_count}適用された提案の数。3
%{username}提案を適用したユーザーのユーザー名。user_1
%{user_full_name}提案を適用するユーザーのフルネーム。User 1

たとえば、コミットメッセージをカスタマイズしてAddresses user_1's review を出力するには、カスタムテキストをAddresses %{username}'s reviewに設定します。

バッチに関する提案

GitLab 14.4でバッチサジェスト用のカスタムコミットメッセージを導入しました。

ブランチに追加されるコミット数を減らすために、1回のコミットで複数の提案を適用することができます。

  1. 左のサイドバーで「検索」または「移動」を選択してあなたのプロジェクトを検索します。
  2. コード > マージリクエストを選択し、マージリクエストを見つけてください。
  3. 適用したい各提案について、[バッチに提案を追加] を選択します。
  4. オプション。提案を削除するには、Remove from batch(バッチから削除)を選択します。
  5. 必要な提案を追加したら、[提案を適用]を選択します。

    caution
    複数の作成者の変更を含む提案を一括して適用した場合、あなたは結果のコミットの作成者としてクレジットされます。プロジェクトがコミットを追加したユーザーからの承認を防ぐように設定されている場合、あなたはこのマージリクエストの承認者ではなくなります。
  6. オプションです。バッチ提案(GitLab 14.4以降)には、変更を説明するカスタムコミットメッセージを指定します。指定しない場合は、デフォルトのコミットメッセージが使用されます。