正式なドキュメントは英語版であり、この日本語訳はAI支援翻訳により作成された参考用のものです。日本語訳の一部の内容は人間によるレビューがまだ行われていないため、翻訳のタイミングにより英語版との間に差異が生じることがあります。最新かつ正確な情報については、英語版をご参照ください。

変更をcherry-pickする

  • プラン: Free、Premium、Ultimate
  • 提供形態: GitLab.com、GitLab Self-Managed、GitLab Dedicated

Gitでは、cherry-pickとは、あるブランチから単一のコミットを取得し、別のブランチに最新のコミットとして追加することです。ソースブランチの残りのコミットは、ターゲットには追加されません。ブランチ全体の内容ではなく、単一のコミットの内容が必要な場合に、コミットをcherry-pickします。たとえば、次のような場合です。

  • デフォルトブランチから以前のリリースブランチにバグ修正をバックポートする。
  • フォークからアップストリームリポジトリに変更をコピーする。

GitLab UIを使用して、プロジェクトまたはプロジェクトフォークから、単一のコミットまたはマージリクエストのすべての内容をcherry-pickします。

この例では、Gitリポジトリにdevelopmainの2つのブランチがあります。コミットBは、mainブランチのコミットEの後に、developブランチからcherry-pickされます。cherry-pickの後、コミットGが追加されます。

%%{init: { "fontFamily": "GitLab Sans" }}%%
gitGraph
    accTitle: Example of cherry-picking a commit
    accDescr: Commit B is copied from the develop branch to the main branch while leaving the original branch unchanged.

 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"

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

GitLab UIまたはAPIでマージコミットをチェリーピックすると、GitLabは関連するマージリクエストのスレッドにシステムノートを追加します。

システムノートは、マージコミットをチェリーピックするときにのみ作成されます。システムノートは、早送りマージを使用しても作成されません。これは、個々のコミットをチェリーピックする場合と、マージリクエストからのすべての変更をチェリーピックする場合の両方に適用されます。

GitLab UIまたはAPIの外部でチェリーピックされたコミットでも、システムノートは作成されません。

システムノートが作成される場合、形式は次のとおりです。 cherry-pick-commit [USER] ブランチ [BRANCHNAME] にコミット [SHA] で変更をピックしました [DATE]:

マージリクエストのタイムラインでのcherry-pick追跡

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

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

マージリクエストがマージされた後、マージリクエストによって導入されたすべての変更をcherry-pickできます。マージリクエストは、アップストリームプロジェクトまたはダウンストリームフォークに存在します。

前提条件:

  • マージリクエストの編集、リポジトリへのコードの追加を許可するプロジェクトのロールが必要です。

  • プロジェクトはマージコミット方式を使用する必要があります。これは、プロジェクトの設定 > マージリクエストで設定されます。

    GitLab 16.9以降では、早送りマージされたコミットは、スカッシュされている場合、またはマージリクエストに単一のコミットが含まれている場合にのみ、GitLab UIからcherry-pickできます。いつでも個々のコミットをcherry-pickできます。

    システムノートは、早送りマージ方式を使用すると作成されません。

これを行うには、次の手順を実行します:

  1. 上部のバーで、検索または移動先を選択して、プロジェクトを見つけます。

  2. 左サイドバーで、コード > マージリクエストを選択し、目的のマージリクエストを見つけます。

  3. マージリクエストレポートセクションまでスクロールし、マージしたユーザーレポートを見つけます。

  4. レポートの右上隅で、Cherry-pickを選択します:

    マージリクエストをCherry-pick

  5. ダイアログで、cherry-pick先のプロジェクトとブランチを選択します。

  6. オプション。これらの変更で新しいマージリクエストを開始を選択します。

  7. Cherry-pickを選択します。

単一のコミットをcherry-pickする

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

マージコミットをチェリーピックすると、GitLabは関連するマージリクエストにシステムノートを作成して操作を追跡します。

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

プロジェクトのすべてのコミットのリストからコミットをcherry-pickするには、次の手順に従います。

  1. 上部のバーで、検索または移動先を選択して、プロジェクトを見つけます。
  2. 左側のサイドバーで、コード > コミットを選択します。
  3. cherry-pickするコミットのタイトルを選択します。
  4. 右上隅で、オプション > cherry-pickを選択します。
  5. cherry-pickダイアログで、cherry-pick先のプロジェクトとブランチを選択します。
  6. オプション。これらの変更で新しいマージリクエストを開始を選択します。
  7. Cherry-pickを選択します。

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

プロジェクトのGitリポジトリでファイルを表示すると、個々のファイルに影響を与える以前のコミットのリストからcherry-pickできます。

  1. 上部のバーで、検索または移動先を選択して、プロジェクトを見つけます。
  2. 左サイドバーで、コード > リポジトリを選択します。
  3. コミットによって変更されたファイルに移動します。最後のコミットブロックで、履歴を選択します。
  4. cherry-pickするコミットのタイトルを選択します。
  5. 右上隅で、オプション > cherry-pickを選択します。
  6. cherry-pickダイアログで、cherry-pick先のプロジェクトとブランチを選択します。
  7. オプション。これらの変更で新しいマージリクエストを開始を選択します。
  8. Cherry-pickを選択します。

別の親コミットを選択する

GitLab UIでマージコミットをcherry-pickすると、メインラインは常に最初の親になります。コマンドラインを使用して、別のメインラインでcherry-pickします。詳細については、ブランチ全体のコンテンツをコピーするを参照してください。