Rebase onto base branch
Rebase the current feature branch onto the latest base branch to keep it up-to-date and prevent merge conflicts from accumulating.
Step 1: Validate preconditions
Run these checks in order. If any fail, inform the user and stop.
Detect current branch and base branch
git rev-parse --abbrev-ref HEAD
If the result is main, master, or develop — inform the user they're already on the base branch and stop.
Detect the base branch:
${CLAUDE_SKILL_DIR}/scripts/detect-base-branch.sh
If the script exits with an error, inform the user no base branch was found and stop.
Check for uncommitted changes
git status --porcelain
If there are uncommitted changes, use AskUserQuestion:
Question: "You have uncommitted changes. Rebase requires a clean working tree. What would you like to do?"
Options:
- Stash and rebase (Recommended) —
git stashbefore rebasing,git stash popafter - Cancel — stop without changes
Step 2: Fetch and check
git fetch origin <base-branch> --quiet
Compare the merge base with the remote base:
git merge-base HEAD origin/<base-branch>
git rev-parse origin/<base-branch>
If they match, the branch is already up-to-date. Inform the user and stop.
Step 3: Rebase
git rebase origin/<base-branch>
On success
Report how many commits ahead of the base branch:
git rev-list --count origin/<base-branch>..HEAD
On conflict
Abort the rebase:
git rebase --abort
If changes were stashed in Step 1, restore them with git stash pop.
Inform the user that the rebase had conflicts and suggest resolving manually:
Automatic rebase failed due to conflicts. To resolve manually, run:
git rebase origin/<base-branch>
Gotchas
- If the branch has already been pushed to a remote, rebasing rewrites history. The user will need to force-push (
git push --force-with-lease) after a successful rebase — warn them. git stash popcan itself cause conflicts if stashed changes overlap with rebased commits. If stash pop fails, inform the user and suggestgit stash showto review the stashed changes.- Detached HEAD state (
HEADinstead of a branch name) means the user is not on any branch. Inform them and stop — do not attempt to rebase. - If the base branch does not exist locally but does on the remote,
git fetchin Step 2 will create the remote tracking ref. The rebase usesorigin/<base-branch>, not the local branch.
Important
- This skill only manages git state. Do not modify project files.
- If changes were stashed, always restore them — even if the rebase fails.