rebase
Rebases the current feature branch onto the base branch (main/master/develop).
Works with
---
name: rebase
description: Rebases the current feature branch onto the base branch (main/master/develop).
license: MIT
---
# 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
```bash
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:
```bash
${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
```bash
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:**
1. **Stash and rebase (Recommended)** — `git stash` before rebasing, `git stash pop` after
2. **Cancel** — stop without changes
## Step 2: Fetch and check
```bash
git fetch origin <base-branch> --quiet
```
Compare the merge base with the remote base:
```bash
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
```bash
git rebase origin/<base-branch>
```
### On success
Report how many commits ahead of the base branch:
```bash
git rev-list --count origin/<base-branch>..HEAD
```
### On conflict
Abort the rebase:
```bash
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 pop` can itself cause conflicts if stashed changes overlap with rebased commits. If stash pop fails, inform the user and suggest `git stash show` to review the stashed changes.
- Detached HEAD state (`HEAD` instead 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 fetch` in Step 2 will create the remote tracking ref. The rebase uses `origin/<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.More Git Workflows skills
git-commit
github/awesome-copilot
Execute git commit with conventional commit message analysis, intelligent staging, and message generation. Use when user asks to commit changes, create a git commit, or mentions "/commit". Supports: (1) Auto-detecting type and scope from changes, (2) Generating conventional commit messages from diff, (3) Interactive commit with optional type/scope/description overrides, (4) Intelligent file staging for logical grouping
git-workflow-and-versioning
addyosmani/agent-skills
Structures git workflow practices. Use when making any code change. Use when committing, branching, resolving conflicts, or when you need to organize work across multiple parallel streams. Use when cutting a release, choosing a semantic version bump, tagging, or writing a changelog.
resolve-merge-conflicts
warpdotdev/common-skills
Resolve Git merge conflicts by extracting only unresolved paths, conflict hunks, and compact diffs instead of loading whole files into context. Use when a merge, rebase, cherry-pick, or stash pop stops on conflicts, when `git status` shows unmerged paths, or when files contain conflict markers.

