チェリーピックの変更点

Git におけるチェリーピックとは、あるブランチからひとつのコミットを取り出し、それを別のブランチの最新コミットとして追加することです。ソースブランチの残りのコミットはターゲットブランチに追加されません。チェリーピックをすべきなのは、ひとつのコミットに含まれる変更が必要だけれども、そのブランチの内容全体を別のブランチに取り込むことはできない、あるいはしたくないという場合です。

GitLab UI を使えば、単一のコミットやマージリクエスト全体をチェリーピックすることができます。プロジェクトのフォークからコミットをチェリーピックすることもできます。

note
コマンドラインからチェリーピックしたコミットを追跡するためのサポートは、このイシューで追跡しています。

チェリーピックの例

このチェリーピックの例では、Git リポジトリにdevelopmain の 2 つのブランチがあるとします。この例では、一方のブランチからチェリーピックしたコミットをもう一方のブランチに追加しています:

gitGraph commit id: "A" branch develop commit id:"B" checkout main commit id:"C" checkout develop commit id:"D" checkout main commit id:"E" cherry-pick id:"B" commit id:"G" checkout develop commit id:"H"

この例では、develop ブランチのコミットB のチェリーピックが、main ブランチのコミットE の後に追加されています。

コミットG はチェリーピックの後に追加されます。

マージリクエストからすべての変更をcherry-pickします。

マージリクエストがマージされた後、マージリクエストによってもたらされたすべての変更をcherry-pickすることができます:

  1. 左のサイドバーで「検索」または「移動」を選択してあなたのプロジェクトを検索します。
  2. コード > マージリクエストを選択し、マージリクエストを見つけてください。
  3. マージリクエストレポートセクションまでスクロールし、マージレポートを見つけます。
  4. 右上隅で、チェリーピックを選択します:

    Cherry-pick merge request

  5. モーダルウィンドウで、cherry-pickするプロジェクトとブランチを選択します。
  6. オプションです。これらの変更で新しいマージリクエストを開始するを選択します。
  7. cherry-pick を選択します。

単一のコミットをcherry-pickします。

GitLabプロジェクトの複数の場所から一つのコミットをcherry-pickすることができます。

プロジェクトのコミットリストから

プロジェクトの全コミット一覧からコミットを cherry-pick するには、次のようにします:

  1. 左のサイドバーで「検索」または「移動」を選択してあなたのプロジェクトを検索します。
  2. コード > コミットを選択します。
  3. チェリーピックしたいコミットのタイトルを選択します。
  4. 右上の [オプション] > [チェリーピック]を選択し、チェリーピックのモーダルを表示します。
  5. モーダルウィンドウで、cherry-pickするプロジェクトとブランチを選択します。
  6. オプションです。これらの変更で新しいマージリクエストを開始するを選択します。
  7. cherry-pick を選択します。

マージリクエストから

マージリクエストがオープンされているかクローズされているかにかかわらず、プロジェクトのマージリクエストからコミットをチェリーピックすることができます。マージリクエストに含まれるコミット一覧からコミットをチェリーピックするには、次のようにします:

  1. 左のサイドバーで「検索」または「移動」を選択してあなたのプロジェクトを検索します。
  2. コード > マージリクエストを選択し、マージリクエストを見つけてください。
  3. マージリクエストのセカンダリメニューでCommitsを選択し、コミットの詳細ページを表示します。
  4. チェリーピックしたいコミットのタイトルを選択します。
  5. 右上の [オプション] > [チェリーピック]を選択し、チェリーピックのモーダルを表示します。
  6. モーダルウィンドウで、cherry-pickするプロジェクトとブランチを選択します。
  7. オプションです。これらの変更で新しいマージリクエストを開始するを選択します。
  8. cherry-pick を選択します。

リポジトリのファイルビューから

プロジェクトの Git リポジトリでファイルを表示する際に、個々のファイルに影響を与えた過去のコミットの一覧から cherry-pick できます:

  1. 左のサイドバーで「検索」または「移動」を選択してあなたのプロジェクトを検索します。
  2. コード > リポジトリを選択し、コミットによって変更されたファイルに移動します。
  3. 履歴を選択し、cherry-pickしたいコミットのタイトルを選択します。
  4. 右上の [オプション] > [チェリーピック]を選択し、チェリーピックのモーダルを表示します。
  5. モーダルウィンドウで、cherry-pickするプロジェクトとブランチを選択します。
  6. オプションです。これらの変更で新しいマージリクエストを開始するを選択します。
  7. cherry-pick を選択します。

プロジェクトにチェリーピック

GitLabユーザーインターフェースから、同じプロジェクト、または同じプロジェクトのフォークからのマージリクエストをcherry-pickすることができます:

  1. マージリクエストのセカンダリメニューでCommitsを選択し、コミットの詳細ページを表示します。
  2. 右上の [オプション] > [チェリーピック]を選択し、チェリーピックのモーダルを表示します。
  3. Pick into projectと Pick into branchで、移動先のプロジェクトとブランチを選択します:Cherry-pick commit
  4. オプションです。マージリクエストを作成する準備ができたら、新しいマージリクエストを開始する を選択します。
  5. cherry-pick を選択します。

cherry-pickされたコミットのシステムノートを表示します。

GitLab UI や API でマージコミットをチェリーピックすると、GitLab は関連するマージリクエストスレッドに [USER] commit[SHA] [DATE]ブランチ** [BRANCHNAME] に変更をピックした システムノートを追加します:

Cherry-pick tracking in merge request timeline

システムノートは、新しいコミットと既存のマージリクエストをクロスリンクします。各デプロイの関連マージリクエストのリストには、cherry-pickされたマージコミットが含まれます。

  • コミットAPIを使用してcherry-pickする際に、変更にカスタムメッセージを追加します。

トラブルシューティング

cherry-pick時に別の親コミットを選択した場合

GitLab UI でマージコミットをチェリーピックするとき、メインラインは常に最初の親になります。別のメインラインでチェリーピックするにはコマンドラインを使います。

ここでは、二番目の親をメインラインとしてマージコミットをチェリーピックする簡単な例を示します:

git cherry-pick -m 2 7a39eb0