正式なドキュメントは英語版であり、この日本語訳は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する

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

前提要件:

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

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

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

これを行うには、次の手順に従います:

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

  2. コード > マージリクエストを選択して、マージリクエストを見つけます。

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

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

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

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

  6. オプション。Start a new merge request with these changes(これらの変更で新しいマージリクエストを開始)を選択します。

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

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

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

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

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

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

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

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

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

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

GitLab UIまたはAPIでマージコミットをcherry-pickすると、GitLabは関連するマージリクエストスレッドにシステムノートを追加します。形式は cherry-pick-commit [USER] picked the changes into the branch(picked the changes into the branch) [BRANCHNAME] with commit [SHA]``[DATE]のようになります:

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

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

GitLab UIまたはAPIの外部でcherry-pickされたコミットは、システムノートを追加しません。

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

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