fix-cherry-pick-pr

star 1.2k

Repair cherry-pick pull requests in tikv/pd when automated cherry-picks leave committed conflict markers, drift from the source PR, or need parity verification against the original PR. Use when given a source PD PR and its cherry-pick PR, or a cherry-pick PR that references an original PR, and asked to compare diffs, resolve release-branch cherry-pick conflicts, run failpoint-aware verification, and push the fixed cherry-pick branch.

tikv By tikv schedule Updated 3/12/2026

name: fix-cherry-pick-pr description: Repair cherry-pick pull requests in tikv/pd when automated cherry-picks leave committed conflict markers, drift from the source PR, or need parity verification against the original PR. Use when given a source PD PR and its cherry-pick PR, or a cherry-pick PR that references an original PR, and asked to compare diffs, resolve release-branch cherry-pick conflicts, run failpoint-aware verification, and push the fixed cherry-pick branch.

Fix Cherry-Pick PR

Overview

Repair and verify cherry-pick PRs in tikv/pd. Compare the source PR and the cherry-pick PR first, then fix the cherry-pick branch without losing release-branch-only code.

1. Identify the PR pair

  • Inspect the cherry-pick PR with gh pr view <pr> --repo tikv/pd --json number,title,body,baseRefName,headRefName,headRepositoryOwner,url,commits.
  • Extract the source PR number from one of:
    • a title suffix like (#10131)
    • body text like This is an automated cherry-pick of #10131
    • the head commit message when the body is ambiguous
  • Read the linked issue if present to confirm the real bug and expected behavior.
  • Treat GitHub mergeable status as insufficient. A PR can be mergeable while still containing committed conflict markers in the patch.

2. Compare source and cherry-pick diffs before editing

  • Compare changed files first:
gh pr diff <source-pr> --repo tikv/pd --name-only
gh pr diff <cherry-pick-pr> --repo tikv/pd --name-only
  • Compare the final aggregate diff, not raw commit count. Cherry-pick PRs can have extra cleanup commits.
  • Normalize diff output when checking parity:
diff -u \
  <(gh pr diff <source-pr> --repo tikv/pd | awk '
      /^diff --git a\// { file = $4; sub("^b/", "", file); next }
      /^\+\+\+ b\// { file = substr($0, 7); next }
      /^--- a\// { next }
      /^[+-][^+-]/ && file != "" { print file ":" $0 }
    ' | sort) \
  <(gh pr diff <cherry-pick-pr> --repo tikv/pd | awk '
      /^diff --git a\// { file = $4; sub("^b/", "", file); next }
      /^\+\+\+ b\// { file = substr($0, 7); next }
      /^--- a\// { next }
      /^[+-][^+-]/ && file != "" { print file ":" $0 }
    ' | sort)
  • Accept differences caused only by base-branch context:
    • different line numbers or surrounding unchanged context
    • branch-only helper or API definitions that must remain in the release branch
    • different deleted lines when the release branch had already diverged before cherry-pick
  • Do not accept:
    • committed <<<<<<<, =======, >>>>>>> markers
    • missing behavior from the source PR
    • extra functional changes not required by the release branch

3. Prepare the working branch

  • Keep the current worktree clean before switching.
  • Fetch the cherry-pick head branch from its actual remote, often tichi or ti-chi-bot.
  • Create a local tracking branch for the cherry-pick head. If the local branch name is free, prefer reusing the remote branch name directly.
  • Confirm the expected head commit before editing.

Example:

git fetch tichi cherry-pick-10131-to-release-8.5
git switch --track tichi/cherry-pick-10131-to-release-8.5
  • If the local branch name already exists or is occupied by another worktree, create a differently named local branch that still tracks the cherry-pick head.

4. Repair the cherry-pick patch

  • Search touched files for conflict markers:
rg -n '<<<<<<<|=======|>>>>>>>' <touched-files>
  • Resolve each block by reconstructing the final intended code. Do not blindly keep one side.
  • Preserve three things at once:
    • the source PR's intended behavior
    • release-branch-only code that existed before cherry-pick and must remain
    • branch-specific adjacent APIs, helpers, or tests
  • When the automated cherry-pick inserted conflict markers around an existing release-branch API, keep the API and insert the source PR logic beside it in the correct final location.
  • If the cherry-pick introduced no real semantic drift beyond committed markers, keep the follow-up commit minimal. Remove markers and restore the intended final code only.

5. Verify in PD with failpoint discipline

  • Follow PD's failpoint rules. If the touched tests rely on failpoints, do not rely on plain go test results before instrumentation.
  • Prefer the narrowest targeted verification first. For the store-limit workflow used in #10131 and #10301:
make failpoint-enable
go test ./server/cluster -run 'TestCheckCache|TestStoreLimitChangeRefreshLimiter' -count=1 -v -timeout=2m
make failpoint-disable
  • If you need broader signal, run the narrowest additional package or integration test target that covers the touched files.
  • If that extra verification fails in unrelated packages, separate that from the cherry-pick fix. Report the failing package and test name rather than attributing it to the cherry-pick automatically.
  • Before finishing, confirm:
rg -n '<<<<<<<|=======|>>>>>>>' <touched-files>
git diff -- <touched-files>
git status --short --branch
  • If failpoint-generated files appear after an interrupted run, restore them with make failpoint-disable before committing or doing other non-test work.

6. Commit and push

  • Use a focused follow-up commit that explains the cleanup, for example:
git commit -s -m 'storelimit: resolve cherry-pick markers in #10301'
  • Push HEAD back to the existing cherry-pick head branch if you have permission.
  • If push fails and the user did not specify a fallback, stop and report the push error instead of inventing a new branch plan.

7. Report the result

Include:

  • source PR number and cherry-pick PR number
  • whether the final cherry-pick diff matches the source PR semantically
  • whether any extra behavior was introduced
  • files repaired
  • targeted tests run and their result
  • any unrelated broader test failure that remains outside the cherry-pick fix

Common pitfalls

  • Do not equate GitHub MERGEABLE with "patch is clean".
  • Do not compare raw commit lists. Compare final diffs.
  • Do not delete release-branch-only code when resolving a cherry-pick block.
  • Do not leave failpoint-generated files in the working tree.
  • Do not claim parity until you compare the final aggregate diffs after the fix.
Install via CLI
npx skills add https://github.com/tikv/pd --skill fix-cherry-pick-pr
Repository Details
star Stars 1,152
call_split Forks 769
navigation Branch main
article Path SKILL.md
More from Creator