Skip to main content

cherry-pick

Cherry-pick a commit from origin/main into a release branch using a temporary git worktree

Quellinformationen

Repository
ai-dynamo/aiperf
Letzte Quellaktivität
7. Mai 2026 um 19:33
Erkannte Sprache von SKILL.md
Englisch
Sterne
753
Forks
212

Installationsoptionen

Standardmäßig ist der Prompt ausgewählt, der zuerst die Quelle prüft. Sie können zu einem direkten Befehl wechseln oder eine lokale Kopie herunterladen.

Quelldateien prüfen

Lesen Sie SKILL.md und alle von SkillsMP angezeigten Begleitdateien, bevor Sie sich für eine Installation entscheiden.

SKILL.md wird angezeigt

SKILL.md
Quellanweisungen · Schreibgeschützte Vorschau
name
cherry-pick
description
Cherry-pick a commit from origin/main into a release branch using a temporary git worktree
disable-model-invocation
true
allowed-tools
Bash(git fetch *), Bash(git log *), Bash(git branch *), Bash(git worktree *), Bash(git cherry-pick *), Bash(git -C * status), Bash(git -C * cherry-pick *), Bash(git -C * checkout *), Bash(git -C * push *), Bash(git -C * branch *), Bash(git push *), Bash(git commit *), Bash(git checkout *), Bash(mktemp *), Bash(make *), Bash(gh pr create *), Bash(gh api *), AskUserQuestion
# Cherry-Pick to Release Branch Cherry-pick a commit from `origin/main` into a release branch using a temporary git worktree. ## Resume Check Before starting, check if there is an existing cherry-pick worktree from a previous run: ```bash git worktree list | grep cherry-pick/ ``` If there is a worktree on a `cherry-pick/*` branch, a previous cherry-pick may have stopped due to conflicts. Ask the user if they want to resume it. If yes: 1. Set `WORKTREE_DIR` to the existing worktree path. 2. Check the cherry-pick state: ```bash git -C "$WORKTREE_DIR" status ``` - If the cherry-pick is still in progress (conflicts resolved, staged), run `git -C "$WORKTREE_DIR" cherry-pick --continue` to finalize. - If the working tree is clean (cherry-pick already completed), proceed to push. 3. Recover the original source commit SHA from the worktree's branch name (it's encoded as `cherry-pick/<source-sha>-to-<release-branch>`): ```bash BRANCH=$(git -C "$WORKTREE_DIR" branch --show-current) SOURCE_SHA=${BRANCH#cherry-pick/} SOURCE_SHA=${SOURCE_SHA%-to-*} ``` Do NOT use the worktree's HEAD SHA — that's the new cherry-pick commit, not the original. Then run step 4 with `$SOURCE_SHA` to gather the original PR metadata. 4. Continue from step 10 (push) onward. If the user does not want to resume, clean up the stale worktree first, then start fresh. ## Steps 1. **Fetch latest from origin:** ```bash git fetch origin ``` 2. **Show recent commits on origin/main:** Run `git log origin/main --oneline -20` to get the list. 3. **Ask the user which commit to cherry-pick:** Use `AskUserQuestion` to present the recent commits as options. Let the user select one. 4. **Look up the original PR for the selected commit:** `gh pr view` does not accept a commit SHA, so query the commits→pulls API directly: ```bash gh api repos/ai-dynamo/aiperf/commits/<source-commit-sha>/pulls \ --jq '.[0] | "\(.number)\t\(.title)"' ``` Save the PR number and title for use in steps 11 and 13. If the commit message contains a PR number (e.g. `(#669)`), you can also use that directly. 5. **Find all release branches:** Run `git branch -r --list 'origin/release/*'` to get all remote release branches matching `release/X.X.X`. 6. **Ask the user which release branch to target:** Use `AskUserQuestion` to present the release branches as options. The most recent version (highest semver) should be the first option marked as "(Recommended)". 7. **Create a temporary worktree on a feature branch:** Release branches are protected, so work on a `cherry-pick/` feature branch from the start. This also makes the worktree identifiable for resume if conflicts occur. ```bash WORKTREE_DIR=$(mktemp -d) git worktree add "$WORKTREE_DIR" origin/<release-branch> git -C "$WORKTREE_DIR" checkout -b cherry-pick/<commit-hash>-to-<release-branch> ``` 8. **Set up the environment in the worktree (required for pre-commit hooks):** ```bash make -C "$WORKTREE_DIR" first-time-setup ``` 9. **Cherry-pick the commit:** ```bash git -C "$WORKTREE_DIR" cherry-pick <commit-hash> ``` If there are conflicts: - Do NOT force resolve conflicts automatically. - Do NOT clean up the worktree — leave it in place so the user can fix conflicts. - Tell the user: 1. The worktree path: `$WORKTREE_DIR` 2. To resolve conflicts in that directory, stage the fixes, then run: `git -C "$WORKTREE_DIR" cherry-pick --continue` 3. If conflict resolution requires a separate commit (not `cherry-pick --continue`), use `git commit -s` with a HEREDOC message. 4. Once resolved, re-run `/cherry-pick` to resume (it will detect the existing worktree). 10. **Push the feature branch:** ```bash git -C "$WORKTREE_DIR" push -u origin HEAD ``` 11. **Create PR (optional — requires `gh` CLI):** If `gh` is available and authenticated, create the PR automatically: ```bash gh pr create \ --repo ai-dynamo/aiperf \ --head cherry-pick/<commit-hash>-to-<release-branch> \ --base <release-branch> \ --label cherry-pick \ --title "<original commit title> (cherry-pick to <release-branch>)" \ --body "$(cat <<'EOF' ## Summary - Cherry-pick of <commit-hash> from `main` into `<release-branch>` - Original PR: #<original-pr-number> — <original commit title> ## Conflicts <If conflicts were resolved, list the files and briefly describe the resolution. Otherwise write "None — clean cherry-pick."> EOF )" ``` If `gh` is not set up or the command fails, skip this step and tell the user to create the PR manually at: `https://github.com/ai-dynamo/aiperf/compare/<release-branch>...cherry-pick/<commit-hash>-to-<release-branch>` 12. **Clean up the worktree:** ```bash git worktree remove "$WORKTREE_DIR" ``` 13. **Print a summary.** Output the following (NOT inside a code block): Cherry-pick complete: `<commit-hash-short>` → `<release-branch>` <original commit title> PR Main: <original-pr-number> :git-merged: https://github.com/ai-dynamo/aiperf/pull/<original-pr-number> PR Release: <cherry-pick-pr-number> :pr-opened: https://github.com/ai-dynamo/aiperf/pull/<cherry-pick-pr-number> If step 11 was skipped (no PR created), omit the PR Release line and instead print the manual comparison URL from step 11's fallback. ## Rules - NEVER add a `Co-Authored-By` line - NEVER manually add a `Signed-off-by` line — `git commit -s` handles this automatically - If the cherry-pick results in a new commit (e.g. conflict resolution), use `git commit -s` with a HEREDOC message - NEVER use `--no-verify` - NEVER force push - NEVER use `git stash`, `git reset`, `git revert`, `git checkout -- <file>`, `git restore`, or `git clean` - Always clean up the worktree after a successful push or if the user abandons the cherry-pick - On cherry-pick conflicts: do NOT clean up the worktree — leave it for the user to resolve, then resume - If anything else fails, clean up the worktree and report the error to the user
Auf GitHub ansehen