変更をcherry-pickする
- プラン: Free、Premium、Ultimate
- 提供形態: GitLab.com、GitLab Self-Managed、GitLab Dedicated
Gitでは、cherry-pickとは、あるブランチから単一のコミットを取得し、別のブランチに最新のコミットとして追加することです。ソースブランチの残りのコミットは、ターゲットには追加されません。ブランチ全体の内容ではなく、単一のコミットの内容が必要な場合に、コミットをcherry-pickします。たとえば、次のような場合です。
- デフォルトブランチから以前のリリースブランチにバグ修正をバックポートする。
- フォークからアップストリームリポジトリに変更をコピーする。
GitLab UIを使用して、プロジェクトまたはプロジェクトフォークから、単一のコミットまたはマージリクエストのすべての内容をcherry-pickします。
この例では、Gitリポジトリにdevelopとmainの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の外部でチェリーピックされたコミットでも、システムノートは作成されません。
システムノートが作成される場合、形式は次のとおりです。 [USER] ブランチ [BRANCHNAME] にコミット [SHA] で変更をピックしました [DATE]:
システムノートは、新しいコミットと既存のマージリクエストを相互リンクします。各デプロイメントの関連付けられたマージリクエストのリストには、cherry-pickされたマージコミットが含まれています。
マージリクエストからすべての変更をcherry-pickする
マージリクエストがマージされた後、マージリクエストによって導入されたすべての変更をcherry-pickできます。マージリクエストは、アップストリームプロジェクトまたはダウンストリームフォークに存在します。
前提条件:
マージリクエストの編集、リポジトリへのコードの追加を許可するプロジェクトのロールが必要です。
プロジェクトはマージコミット方式を使用する必要があります。これは、プロジェクトの設定 > マージリクエストで設定されます。
GitLab 16.9以降では、早送りマージされたコミットは、スカッシュされている場合、またはマージリクエストに単一のコミットが含まれている場合にのみ、GitLab UIからcherry-pickできます。いつでも個々のコミットをcherry-pickできます。
システムノートは、早送りマージ方式を使用すると作成されません。
これを行うには、次の手順を実行します:
上部のバーで、検索または移動先を選択して、プロジェクトを見つけます。
左サイドバーで、コード > マージリクエストを選択し、目的のマージリクエストを見つけます。
マージリクエストレポートセクションまでスクロールし、マージしたユーザーレポートを見つけます。
レポートの右上隅で、Cherry-pickを選択します:
ダイアログで、cherry-pick先のプロジェクトとブランチを選択します。
オプション。これらの変更で新しいマージリクエストを開始を選択します。
Cherry-pickを選択します。
単一のコミットをcherry-pickする
GitLabプロジェクトの複数の場所から単一のコミットをcherry-pickできます。
マージコミットをチェリーピックすると、GitLabは関連するマージリクエストにシステムノートを作成して操作を追跡します。
プロジェクトのコミットリストから
プロジェクトのすべてのコミットのリストからコミットをcherry-pickするには、次の手順に従います。
- 上部のバーで、検索または移動先を選択して、プロジェクトを見つけます。
- 左側のサイドバーで、コード > コミットを選択します。
- cherry-pickするコミットのタイトルを選択します。
- 右上隅で、オプション > cherry-pickを選択します。
- cherry-pickダイアログで、cherry-pick先のプロジェクトとブランチを選択します。
- オプション。これらの変更で新しいマージリクエストを開始を選択します。
- Cherry-pickを選択します。
リポジトリのファイルビューから
プロジェクトのGitリポジトリでファイルを表示すると、個々のファイルに影響を与える以前のコミットのリストからcherry-pickできます。
- 上部のバーで、検索または移動先を選択して、プロジェクトを見つけます。
- 左サイドバーで、コード > リポジトリを選択します。
- コミットによって変更されたファイルに移動します。最後のコミットブロックで、履歴を選択します。
- cherry-pickするコミットのタイトルを選択します。
- 右上隅で、オプション > cherry-pickを選択します。
- cherry-pickダイアログで、cherry-pick先のプロジェクトとブランチを選択します。
- オプション。これらの変更で新しいマージリクエストを開始を選択します。
- Cherry-pickを選択します。
別の親コミットを選択する
GitLab UIでマージコミットをcherry-pickすると、メインラインは常に最初の親になります。コマンドラインを使用して、別のメインラインでcherry-pickします。詳細については、ブランチ全体のコンテンツをコピーするを参照してください。

