[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6KX0EWYAMB2HENGDSE4TAHT":3,"skill-same:01M6KX0EWYAMB2HENGDSE4TAHT":94},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":38,"linkOnly":39,"markdownContent":40,"markdownBody":41,"frontMatter":42,"refName":26,"commitSha":45,"skillDirectory":46,"forksCount":47,"repositoryHtmlUrl":48,"repositoryHomepageUrl":6,"ownerHtmlUrl":49,"ownerBlogUrl":50,"ownerDescription":51,"updatedAt":52,"install":53,"resources":66},"01M6KX0EWYAMB2HENGDSE4TAHT","rebase",null,"Rebase the current feature branch onto a target branch (default origin\u002Fmain) and resolve its conflicts.","dougborg\u002Fharness-kit","dougborg","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F1261222?v=4","01M6KWS4PB51EYD4ZDJJSGNGB2","Doug Borg","01M6KWS4T8ZZW6SX5QZS9B5BN2",0,"Apache-2.0","https:\u002F\u002Fgithub.com\u002Fdougborg\u002Fharness-kit\u002Fblob\u002Fmain\u002Fskills\u002Fengineering\u002Frebase\u002FSKILL.md",[],[5,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37],"default","rev","checkout","scripts","feature","shared","git log","main","show","conflicts","editor","log","diff","fetch","branch","Bash","git branch","git merge","merge","2026-11-10 10:12:30",false,"---\nname: rebase\ndescription: Rebase the current feature branch onto a target branch (default origin\u002Fmain) and resolve its conflicts.\nargument-hint: \"[target branch]\"\nallowed-tools: Bash(git rebase*), Bash(git fetch*), Bash(git status*), Bash(git diff*), Bash(git log*), Bash(git add*), Bash(git stash*), Bash(git branch*), Bash(git rev-parse*), Bash(git merge-base*), Bash(git show*), Bash(git checkout*), Bash(GIT_SEQUENCE_EDITOR*), Bash(\u003Cskill-dir>\u002F*), Bash(\u003Cshared-scripts-dir>\u002F*), Read, Grep, Glob\n---\n\n# Rebase\n\nReplay the current feature branch's commits onto a target branch (default\n`origin\u002Fmain`), resolving conflicts with both sides understood.\n\n- **Rebase only local feature branches.** If the branch is pushed and others\n  work on it, confirm with the user first; the pre-flight script refuses a\n  shared branch.\n- **Stash uncommitted work before rebasing**, since a dirty tree makes the\n  rebase fail; the pre-flight script does it for you.\n- **Stash only when `git status --short` shows work to save.** On a clean\n  tree `git stash` saves nothing, and a later `git stash pop` pops whatever\n  entry is on top, possibly months-old WIP from another branch, causing a\n  surprise conflict. To compare against a ref, use `git diff \u003Cref>` or a\n  separate `git worktree`, not a stash\u002Fpop pair.\n- **Resolve each conflict with both sides read.** Picking a side blind drops\n  someone's change.\n- **Fix hook failures at the cause;** `--no-verify` is not a fix.\n\n## 1. Pre-flight\n\nCheck no rebase is already in progress; if this succeeds, one is, so finish\nor abort it first:\n\n```bash\ngit rev-parse -q --verify REBASE_HEAD\n```\n\nThen run the pre-flight script. It refuses `main`\u002F`master`, fetches the\ntarget's remote, checks whether other authors share the branch, and stashes\nuncommitted work if there is any:\n\n```bash\ntarget=$(\u003Cskill-dir>\u002Fpreflight.sh \"${ARGUMENTS:-origin\u002Fmain}\")\n```\n\nIt exits 1 on a primary branch, and on a branch with commits from other\nauthors, local or already pushed. On a shared branch it names those authors:\nstop and ask the user whether to rebase anyway (after checking with those\ncollaborators), merge instead, or abort. Only on an explicit yes, rerun it\nwith `--allow-shared`.\n\nIt prints the target on stdout. If it stashed (untracked files included), it\nprints `STASH_REF=\u003Ccommit>` on stderr; note that commit for step 5. Shell\nvariables don't survive between Bash calls, so write the printed values in\nplace of `$target` and `\u003CSTASH_REF>` in later commands. Done when the script\nexits 0 and you have the target.\n\n## 2. Assess\n\n```bash\n\u003Cskill-dir>\u002Fassess.sh \"$target\"\n```\n\nIt shows the commits to replay, the files that may conflict, and the merge\nbase. Done when you know how many commits will replay and which files are at\nrisk.\n\n## 3. Rebase\n\n```bash\ngit rebase $target\n```\n\nDone when it finishes cleanly (go to step 5) or stops on a conflict (step 4).\n\n## 4. Resolve conflicts\n\nList the conflicted files:\n\n```bash\ngit diff --name-only --diff-filter=U\n```\n\nFor each one:\n\n1. Read the whole file, conflict markers (`\u003C\u003C\u003C\u003C\u003C\u003C\u003C`, `=======`, `>>>>>>>`)\n   included.\n2. See what the target changed and why: `git log -p $target -- \u003Cfile>`.\n3. See what the replayed commit changed: `git show REBASE_HEAD -- \u003Cfile>`.\n4. Edit the file to keep the intent of both sides, and remove every marker.\n5. Stage it: `git add \u003Cfile>`.\n\nBinary files, lock files, generated files, and delete-versus-modify conflicts\neach have a set strategy in\n[conflict-strategies.md](conflict-strategies.md); read it when you hit one,\nbecause `--ours` and `--theirs` are swapped during a rebase.\n\nWhen every file in the current commit is resolved:\n\n```bash\ngit rebase --continue\n```\n\nRepeat for each commit that stops. Done when the rebase completes.\n\nTo start over (the conflicts are too tangled to resolve here, the target was\nwrong, or the user asks to stop), `git rebase --abort` restores the branch to\nits pre-rebase state.\n\n## 5. Verify\n\n```bash\ngit log --oneline $target..HEAD\n```\n\nIf step 1 stashed, restore that exact stash by the commit it printed, then\ndrop only its entry; the stash list is shared with every worktree, so\n`stash@{0}` may belong to someone else by now:\n\n```bash\ngit stash apply \"\u003CSTASH_REF>\"\ngit stash list --format='%gd %H' | awk '$2 == \"\u003CSTASH_REF>\" {print $1}'\n```\n\nThen run `git stash drop` on the `stash@{n}` that printed.\n\nDiscover the verification command, then run what it prints as a **separate**\nBash call (`eval` in the same call defeats `allowed-tools` matching and\nprompts):\n\n```bash\n\u003Cshared-scripts-dir>\u002Fdiscover-verification-cmd.sh\n```\n\nA failure here means the rebase is complete but the branch has integration\nproblems to fix. Done when the history looks right, any stash is restored,\nand you have the verification result.\n\n## 6. Summary\n\nReport the commits rebased, the conflicts resolved and their files, the\nverification result, and whether the branch needs\n`git push --force-with-lease`. Done when the report is printed.\n\n## Squash, drop, or reword without an editor\n\n`squash.sh` drives `git rebase -i` through `GIT_SEQUENCE_EDITOR`, detecting\nGNU or BSD `sed` for the right `sed -i` syntax:\n\n```bash\n\u003Cskill-dir>\u002Fsquash.sh squash $target               # squash all commits into one\n\u003Cskill-dir>\u002Fsquash.sh drop $target \u003Cshort-sha>     # drop one commit\n\u003Cskill-dir>\u002Fsquash.sh reword $target \u003Cshort-sha>   # reword one commit\n```\n\n## Related\n\n- `\u002Fcommit` — quality-gated conventional commits\n- `\u002Fopen-pr` — open a PR with validation, often after a rebase\n- `\u002Freview-pr` — address review feedback\n","# Rebase\n\nReplay the current feature branch's commits onto a target branch (default\n`origin\u002Fmain`), resolving conflicts with both sides understood.\n\n- **Rebase only local feature branches.** If the branch is pushed and others\n  work on it, confirm with the user first; the pre-flight script refuses a\n  shared branch.\n- **Stash uncommitted work before rebasing**, since a dirty tree makes the\n  rebase fail; the pre-flight script does it for you.\n- **Stash only when `git status --short` shows work to save.** On a clean\n  tree `git stash` saves nothing, and a later `git stash pop` pops whatever\n  entry is on top, possibly months-old WIP from another branch, causing a\n  surprise conflict. To compare against a ref, use `git diff \u003Cref>` or a\n  separate `git worktree`, not a stash\u002Fpop pair.\n- **Resolve each conflict with both sides read.** Picking a side blind drops\n  someone's change.\n- **Fix hook failures at the cause;** `--no-verify` is not a fix.\n\n## 1. Pre-flight\n\nCheck no rebase is already in progress; if this succeeds, one is, so finish\nor abort it first:\n\n```bash\ngit rev-parse -q --verify REBASE_HEAD\n```\n\nThen run the pre-flight script. It refuses `main`\u002F`master`, fetches the\ntarget's remote, checks whether other authors share the branch, and stashes\nuncommitted work if there is any:\n\n```bash\ntarget=$(\u003Cskill-dir>\u002Fpreflight.sh \"${ARGUMENTS:-origin\u002Fmain}\")\n```\n\nIt exits 1 on a primary branch, and on a branch with commits from other\nauthors, local or already pushed. On a shared branch it names those authors:\nstop and ask the user whether to rebase anyway (after checking with those\ncollaborators), merge instead, or abort. Only on an explicit yes, rerun it\nwith `--allow-shared`.\n\nIt prints the target on stdout. If it stashed (untracked files included), it\nprints `STASH_REF=\u003Ccommit>` on stderr; note that commit for step 5. Shell\nvariables don't survive between Bash calls, so write the printed values in\nplace of `$target` and `\u003CSTASH_REF>` in later commands. Done when the script\nexits 0 and you have the target.\n\n## 2. Assess\n\n```bash\n\u003Cskill-dir>\u002Fassess.sh \"$target\"\n```\n\nIt shows the commits to replay, the files that may conflict, and the merge\nbase. Done when you know how many commits will replay and which files are at\nrisk.\n\n## 3. Rebase\n\n```bash\ngit rebase $target\n```\n\nDone when it finishes cleanly (go to step 5) or stops on a conflict (step 4).\n\n## 4. Resolve conflicts\n\nList the conflicted files:\n\n```bash\ngit diff --name-only --diff-filter=U\n```\n\nFor each one:\n\n1. Read the whole file, conflict markers (`\u003C\u003C\u003C\u003C\u003C\u003C\u003C`, `=======`, `>>>>>>>`)\n   included.\n2. See what the target changed and why: `git log -p $target -- \u003Cfile>`.\n3. See what the replayed commit changed: `git show REBASE_HEAD -- \u003Cfile>`.\n4. Edit the file to keep the intent of both sides, and remove every marker.\n5. Stage it: `git add \u003Cfile>`.\n\nBinary files, lock files, generated files, and delete-versus-modify conflicts\neach have a set strategy in\n[conflict-strategies.md](conflict-strategies.md); read it when you hit one,\nbecause `--ours` and `--theirs` are swapped during a rebase.\n\nWhen every file in the current commit is resolved:\n\n```bash\ngit rebase --continue\n```\n\nRepeat for each commit that stops. Done when the rebase completes.\n\nTo start over (the conflicts are too tangled to resolve here, the target was\nwrong, or the user asks to stop), `git rebase --abort` restores the branch to\nits pre-rebase state.\n\n## 5. Verify\n\n```bash\ngit log --oneline $target..HEAD\n```\n\nIf step 1 stashed, restore that exact stash by the commit it printed, then\ndrop only its entry; the stash list is shared with every worktree, so\n`stash@{0}` may belong to someone else by now:\n\n```bash\ngit stash apply \"\u003CSTASH_REF>\"\ngit stash list --format='%gd %H' | awk '$2 == \"\u003CSTASH_REF>\" {print $1}'\n```\n\nThen run `git stash drop` on the `stash@{n}` that printed.\n\nDiscover the verification command, then run what it prints as a **separate**\nBash call (`eval` in the same call defeats `allowed-tools` matching and\nprompts):\n\n```bash\n\u003Cshared-scripts-dir>\u002Fdiscover-verification-cmd.sh\n```\n\nA failure here means the rebase is complete but the branch has integration\nproblems to fix. Done when the history looks right, any stash is restored,\nand you have the verification result.\n\n## 6. Summary\n\nReport the commits rebased, the conflicts resolved and their files, the\nverification result, and whether the branch needs\n`git push --force-with-lease`. Done when the report is printed.\n\n## Squash, drop, or reword without an editor\n\n`squash.sh` drives `git rebase -i` through `GIT_SEQUENCE_EDITOR`, detecting\nGNU or BSD `sed` for the right `sed -i` syntax:\n\n```bash\n\u003Cskill-dir>\u002Fsquash.sh squash $target               # squash all commits into one\n\u003Cskill-dir>\u002Fsquash.sh drop $target \u003Cshort-sha>     # drop one commit\n\u003Cskill-dir>\u002Fsquash.sh reword $target \u003Cshort-sha>   # reword one commit\n```\n\n## Related\n\n- `\u002Fcommit` — quality-gated conventional commits\n- `\u002Fopen-pr` — open a PR with validation, often after a rebase\n- `\u002Freview-pr` — address review feedback\n",{"name":5,"description":7,"allowed-tools":43,"argument-hint":44},"Bash(git rebase*), Bash(git fetch*), Bash(git status*), Bash(git diff*), Bash(git log*), Bash(git add*), Bash(git stash*), Bash(git branch*), Bash(git rev-parse*), Bash(git merge-base*), Bash(git show*), Bash(git checkout*), Bash(GIT_SEQUENCE_EDITOR*), Bash(\u003Cskill-dir>\u002F*), Bash(\u003Cshared-scripts-dir>\u002F*), Read, Grep, Glob","[target branch]","023b01bfb4a86fbf1e38a749f1044cce3e5da67d","skills\u002Fengineering\u002Frebase",1,"https:\u002F\u002Fgithub.com\u002Fdougborg\u002Fharness-kit","https:\u002F\u002Fgithub.com\u002Fdougborg","http:\u002F\u002Fdougborg.org","Platforms and Infrastructure Software Engineer","2026-10-19 05:43:53",{"source":8,"skillName":5,"commands":54,"prompt":64,"zipAvailable":65},[55,58,61],{"tool":56,"command":57},"npx","npx skills add dougborg\u002Fharness-kit --skill rebase",{"tool":59,"command":60},"bunx","bunx skills add dougborg\u002Fharness-kit --skill rebase",{"tool":62,"command":63},"pnpm","pnpm dlx skills add dougborg\u002Fharness-kit --skill rebase","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fdougborg\u002Fharness-kit\u002Fblob\u002Fmain\u002Fskills\u002Fengineering\u002Frebase\u002FSKILL.md",true,[67,73,79,83,87,91],{"path":68,"resourceType":69,"resourceTypeDesc":70,"sizeBytes":71,"sourceHtmlUrl":72},"agents\u002Fopenai.yaml","REFERENCE","参考文档",157,"https:\u002F\u002Fgithub.com\u002Fdougborg\u002Fharness-kit\u002Fblob\u002Fmain\u002Fskills\u002Fengineering\u002Frebase\u002Fagents\u002Fopenai.yaml",{"path":74,"resourceType":75,"resourceTypeDesc":76,"sizeBytes":77,"sourceHtmlUrl":78},"assess.sh","SCRIPT","脚本",467,"https:\u002F\u002Fgithub.com\u002Fdougborg\u002Fharness-kit\u002Fblob\u002Fmain\u002Fskills\u002Fengineering\u002Frebase\u002Fassess.sh",{"path":80,"resourceType":69,"resourceTypeDesc":70,"sizeBytes":81,"sourceHtmlUrl":82},"conflict-strategies.md",1698,"https:\u002F\u002Fgithub.com\u002Fdougborg\u002Fharness-kit\u002Fblob\u002Fmain\u002Fskills\u002Fengineering\u002Frebase\u002Fconflict-strategies.md",{"path":84,"resourceType":75,"resourceTypeDesc":76,"sizeBytes":85,"sourceHtmlUrl":86},"is-branch-shared.sh",1317,"https:\u002F\u002Fgithub.com\u002Fdougborg\u002Fharness-kit\u002Fblob\u002Fmain\u002Fskills\u002Fengineering\u002Frebase\u002Fis-branch-shared.sh",{"path":88,"resourceType":75,"resourceTypeDesc":76,"sizeBytes":89,"sourceHtmlUrl":90},"preflight.sh",2071,"https:\u002F\u002Fgithub.com\u002Fdougborg\u002Fharness-kit\u002Fblob\u002Fmain\u002Fskills\u002Fengineering\u002Frebase\u002Fpreflight.sh",{"path":92,"resourceType":75,"resourceTypeDesc":76,"sizeBytes":85,"sourceHtmlUrl":93},"squash.sh","https:\u002F\u002Fgithub.com\u002Fdougborg\u002Fharness-kit\u002Fblob\u002Fmain\u002Fskills\u002Fengineering\u002Frebase\u002Fsquash.sh",[95,114,135,168,192,209],{"skillNo":96,"name":97,"nameZh":6,"description":98,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":99,"categories":100,"keywords":106,"publishedAt":38},"01M6KX4J65S5FZKMSN5DQNPSZM","teach","Teach yourself a topic over several sessions, with lessons, references, and a record of what you've learned.","https:\u002F\u002Fgithub.com\u002Fdougborg\u002Fharness-kit\u002Fblob\u002Fmain\u002Fskills\u002Fwriting\u002Fteach\u002FSKILL.md",[101],{"categoryNo":102,"categoryName":103,"taxonomyType":104,"taxonomyTypeDesc":105},"01JBSEEDCAT000000000000039","教师与教育","PROFESSION","适用职业",[97,107,108,109,110,111,112,113],"lessons","you","with","learned","record","references","sessions",{"skillNo":115,"name":116,"nameZh":6,"description":117,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":118,"categories":119,"keywords":125,"publishedAt":38},"01M6KX4FSSG7MHF00JDT5QT0BQ","svg-logo-designer","Generate SVG logos with multiple concepts, layouts, and color variations.","https:\u002F\u002Fgithub.com\u002Fdougborg\u002Fharness-kit\u002Fblob\u002Fmain\u002Fskills\u002Fwriting\u002Fsvg-logo-designer\u002FSKILL.md",[120],{"categoryNo":121,"categoryName":122,"taxonomyType":123,"taxonomyTypeDesc":124},"01JBSEEDCAT000000000000016","图像与多媒体","SCENARIO","使用场景",[126,127,128,129,130,131,109,132,133,134],"logo","designer","svg logo designer","SVG","color","concepts","write","read","generate",{"skillNo":136,"name":137,"nameZh":6,"description":138,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":139,"categories":140,"keywords":147,"publishedAt":38},"01M6KX4BD3J9MZPPSH4MENH7FP","documentation-writer","Writes and revises human-facing documentation — READMEs, contributor and setup guides, reference pages, architecture notes, CLAUDE.md, and changelog entries. Covers picking the right document type for the question being asked, structuring for skimming, writing examples that actually run, and keeping docs from going stale. Use when creating or rewriting docs, when a README has drifted from the code, or when deciding where a piece of information belongs. For SKILL.md and agent files, use \u002Fskill-writer instead.","https:\u002F\u002Fgithub.com\u002Fdougborg\u002Fharness-kit\u002Fblob\u002Fmain\u002Fskills\u002Fwriting\u002Fdocumentation-writer\u002FSKILL.md",[141,144],{"categoryNo":142,"categoryName":143,"taxonomyType":123,"taxonomyTypeDesc":124},"01JBSEEDCAT000000000000018","写作与文案",{"categoryNo":145,"categoryName":146,"taxonomyType":104,"taxonomyTypeDesc":105},"01JBSEEDCAT000000000000036","内容创作者",[148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167],"writer","documentation writer","documentation","entries","changelog","architecture","document","files","use","question","README","notes","code","examples","pages","for","information","guides","type","writing",{"skillNo":169,"name":170,"nameZh":6,"description":171,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":172,"categories":173,"keywords":174,"publishedAt":38},"01M6KX47ZJ4ZWHDN3MY8SYAWZZ","adhd-mode","Shapes every response for a reader with ADHD: the next action first, numbered steps, progress restated each turn, tangents held back, concrete time estimates, wins made visible. Stays on for the rest of the session until the reader says \"stop adhd mode\". On Claude Code, the harness-kit:adhd output style does the same without invoking this skill.","https:\u002F\u002Fgithub.com\u002Fdougborg\u002Fharness-kit\u002Fblob\u002Fmain\u002Fskills\u002Fwriting\u002Fadhd-mode\u002FSKILL.md",[],[175,176,177,178,163,179,180,109,181,182,183,184,185,186,187,188,189,190,191,160],"adhd","mode","adhd mode","next","action","kit","output","style","progress","time","back","stop","session","reader","first","REST","harness",{"skillNo":193,"name":194,"nameZh":6,"description":195,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":196,"categories":197,"keywords":198,"publishedAt":38},"01M6KX463Z6E18EPDW873GDHKB","wait-what","That last message didn't land: re-explain it with the missing context.","https:\u002F\u002Fgithub.com\u002Fdougborg\u002Fharness-kit\u002Fblob\u002Fmain\u002Fskills\u002Fthinking\u002Fwait-what\u002FSKILL.md",[],[199,200,201,109,202,203,204,205,206,207,208],"wait","wait what","re","it","missing","message","context","explain","land","last",{"skillNo":210,"name":211,"nameZh":6,"description":212,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":213,"categories":214,"keywords":215,"publishedAt":38},"01M6KX43NE1NB0Y2HECY515730","to-questionnaire","Turn a decision you can't make alone into a questionnaire for the one person who can answer it, filled in async or together in a meeting.","https:\u002F\u002Fgithub.com\u002Fdougborg\u002Fharness-kit\u002Fblob\u002Fmain\u002Fskills\u002Fthinking\u002Fto-questionnaire\u002FSKILL.md",[],[216,217,163,218,219,220,221,108,222,202,223,224],"to questionnaire","questionnaire","person","can","answer","meeting","make","async","decision"]