mit einem Klick
rebase-onto-main
// Rebase a branch onto main, handling squash-merged parent branches cleanly
// Rebase a branch onto main, handling squash-merged parent branches cleanly
| name | rebase-onto-main |
| description | Rebase a branch onto main, handling squash-merged parent branches cleanly |
| argument-hint | [optional: branch name, defaults to current branch] |
| allowed-tools | Bash, Read, Glob, Grep, Agent |
Rebase the current (or specified) branch onto main, correctly handling the case where the branch was built on top of another branch that has since been squash-merged into main.
When a parent branch is squash-merged, its individual commits become a single new commit on main with a different hash. A normal git rebase main will try to replay the parent's original commits, causing messy conflicts. The fix is to cherry-pick only the commits unique to this branch onto a fresh branch from main.
Identify the branch. Use $ARGUMENTS if provided, otherwise use the current branch.
Fetch and update main:
git fetch origin main:main
Find the merge base between the branch and main:
git merge-base <branch> main
List all commits on the branch since the merge base:
git log --oneline <merge-base>..<branch>
Identify which commits are unique to this branch vs. inherited from a parent branch. Look for:
main that correspond to a group of commits at the bottom of the branch's history (check PR titles, commit message keywords).git rebase main and skip the rest.Create a fresh branch from main:
git checkout -b <branch>-rebase main
Cherry-pick only the unique commits (oldest first):
git cherry-pick <first-unique-commit>^..<branch>
The A^..B range means "from the parent of A through B inclusive."
Handle conflicts if any arise during cherry-pick. Resolve and git cherry-pick --continue.
Replace the old branch:
git branch -m <branch> <branch>-old
git branch -m <branch>-rebase <branch>
Verify the result:
git log --oneline main..<branch>
Confirm only the expected commits are present.
Ask the user before force-pushing. When approved:
git push origin <branch> --force-with-lease
Clean up the old branch:
git branch -D <branch>-old
[HINT] Laden Sie das komplette Skill-Verzeichnis einschließlich SKILL.md und aller zugehörigen Dateien herunter