name: cherry-pick
description: Cherry-pick a PR to a target version branch
argument-hint:
disable-model-invocation: true
allowed-tools: Read, Edit, Bash(git:), Bash(gh:), Bash(mvn:*)
Cherry-pick the PR with the GitHub URL $0 to the $1 branch. This command is only run when automated cherry-picking failed, so expect merge conflicts.
Steps
Gather PR information using
gh pr view:- The base branch the PR was merged into (source branch)
- The merge commit SHA
- The PR branch name
- The PR title
- The PR description
- The PR labels
Prepare branches:
- Fetch latest commits for the source branch:
git fetch origin <source-branch> - Fetch latest commits for the target branch:
git fetch origin $1 - Create a new branch from the remote target branch using
--no-track:git checkout -b <branch-name> origin/$1 --no-track - Name the branch using the PR branch name with the target branch as suffix (e.g.,
fix/click-event-listener-$1)
- Fetch latest commits for the source branch:
Cherry-pick the merge commit:
- Run
git cherry-pick -m 1 <merge-commit-sha> - Resolve any merge conflicts. If needed, read the conflicting files from both the source and target branches to understand the differences.
- Run
Verify the changes:
- Run unit tests for the affected component module(s)
- If tests fail, investigate and fix the issue before proceeding
- Run the formatter:
mvn spotless:apply
Commit the resolved cherry-pick:
- Stage only the files that were part of the original cherry-pick or that you had to fix after running tests (do not include untracked files)
- Complete the cherry-pick commit using the PR title as the commit message, appending "(CP: $1)" to the subject line
Push and create PR:
- Push the branch to origin
- Create a new PR targeting the $1 branch using
gh pr create - Start the description with "This PR cherry-picks changes from the original PR #
to branch $1." - Then add a separator (
---) surrounded by new lines - Then add the original PR description, wrapped in a Markdown blockquote (prefix each line with
>)
Update original PR:
- If the original PR has the label
need to pick manually $1, remove it - Add the label
cherry-picked-$1to the original PR - Ignore any errors if the labels do not exist
- If the original PR has the label
You can use the gh CLI tool for GitHub operations throughout these steps.