変更を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する
マージリクエストがマージされた後、マージリクエストによって導入されたすべての変更をcherry-pickできます。マージリクエストは、アップストリームプロジェクトまたはダウンストリームフォークに存在します。
前提要件:
マージリクエストの編集、リポジトリへのコードの追加を許可するプロジェクトのロールが必要です。
プロジェクトでは、プロジェクトの設定 > マージリクエストで設定されている、マージ方法であるMerge Commit(マージコミット)を使用する必要があります。
GitLab 16.9以降では、早送りマージされたコミットは、スカッシュされている場合、またはマージリクエストに単一のコミットが含まれている場合にのみ、GitLab UIからcherry-pickできます。いつでも個々のコミットをcherry-pickできます。
これを行うには、次の手順に従います:
左側のサイドバーで、検索または移動先を選択して、プロジェクトを見つけます。
コード > マージリクエストを選択して、マージリクエストを見つけます。
マージリクエストレポートセクションまでスクロールし、マージしたユーザーレポートを見つけます。
レポートの右上隅で、cherry-pickを選択します:
ダイアログで、cherry-pick先のプロジェクトとブランチを選択します。
オプション。Start a new merge request with these changes(これらの変更で新しいマージリクエストを開始)を選択します。
cherry-pickを選択します。
単一のコミットをcherry-pickする
GitLabプロジェクトの複数の場所から単一のコミットをcherry-pickできます。
プロジェクトのコミットリストから
プロジェクトのすべてのコミットのリストからコミットをcherry-pickするには、次の手順に従います:
- 左側のサイドバーで、検索または移動先を選択して、プロジェクトを見つけます。
- コード > コミットを選択します。
- cherry-pickするコミットのタイトルを選択します。
- 右上隅で、オプション > cherry-pickを選択します。
- cherry-pickダイアログで、cherry-pick先のプロジェクトとブランチを選択します。
- オプション。Start a new merge request with these changes(これらの変更で新しいマージリクエストを開始)を選択します。
- cherry-pickを選択します。
リポジトリのファイルビューから
プロジェクトのGitリポジトリでファイルを表示すると、個々のファイルに影響を与える以前のコミットのリストからcherry-pickできます:
- 左側のサイドバーで、検索または移動先を選択して、プロジェクトを見つけます。
- コード > リポジトリを選択します。
- コミットによって変更されたファイルに移動します。最後のコミットブロックで、履歴を選択します。
- cherry-pickするコミットのタイトルを選択します。
- 右上隅で、オプション > cherry-pickを選択します。
- cherry-pickダイアログで、cherry-pick先のプロジェクトとブランチを選択します。
- オプション。Start a new merge request with these changes(これらの変更で新しいマージリクエストを開始)を選択します。
- cherry-pickを選択します。
cherry-pickされたコミットのシステムノートを表示する
GitLab UIまたはAPIでマージコミットをcherry-pickすると、GitLabは関連するマージリクエストスレッドにシステムノートを追加します。形式は [USER] picked the changes into the branch(picked the changes into the branch) [BRANCHNAME] with commit [SHA]``[DATE]のようになります:
システムノートは、新しいコミットと既存のマージリクエストを相互リンクします。各デプロイメントの関連付けられたマージリクエストのリストには、cherry-pickされたマージコミットが含まれています。
GitLab UIまたはAPIの外部でcherry-pickされたコミットは、システムノートを追加しません。
別の親コミットを選択する
GitLab UIでマージコミットをcherry-pickすると、メインラインは常に最初の親になります。コマンドラインを使用して、別のメインラインでcherry-pickします。詳細については、Gitを使用したマージコミットのcherry-pickを参照してください。

