About rebase
rebase is a Git skill that selects a target branch from its arguments and rebases the current branch onto it. It stashes local changes, guides conflict handling, and restores its own stash after a successful rebase.
Key features
- 01Choose a rebase target from arguments
- 02Stash local changes before rebasing
- 03Review recent target-branch changes
- 04Continue the rebase through conflicts
- 05Restore the created stash on success
Use cases
- 01Rebase the current branch onto its configured base
- 02Rebase onto origin/main or a named remote branch
- 03Rebase while preserving local changes
Install
Copy the command and run it in a terminal.
$
npx skills add https:/ / github.com/ raine/ workmux --skill rebaseAfter installing, type/rebasein Claude Code to confirm it loaded.
Details
From the project READMERebase the current branch.
Arguments: $ARGUMENTS
Behavior:
- No arguments: rebase on the current branch's workmux base branch
(
git config branch.<current>.workmux-base), falling back to local main when none is configured - "origin": fetch origin, rebase on origin/main
- "origin/branch": fetch origin, rebase on origin/branch
- "branch": rebase on local branch (use "main" to force a rebase on local main)
Steps:
- Check for local changes with
git status --porcelain:- If the working tree has staged, unstaged, or untracked changes, stash them
with
git stash push --include-untracked -m "workmux rebase". - Remember whether this command created a stash. Existing stash entries must remain untouched.
- If stashing fails, stop before fetching or rebasing.
- If the working tree has staged, unstaged, or untracked changes, stash them
with
- Parse arguments:
- No args → target is the current branch's workmux base branch
(
git config --get branch.$(git branch --show-current).workmux-base); if that is empty, target is "main". No fetch. - Contains "/" (e.g., "origin/develop") → split into remote and branch, fetch remote, target is remote/branch
- Just "origin" → fetch origin, target is "origin/main"
- Anything else → target is that branch name, no fetch
- No args → target is the current branch's workmux base branch
(
- If fetching, run:
git fetch <remote>. If fetching or target resolution fails before the rebase begins, restore the stash created in step 1 before stopping. - Run:
git rebase <target> - If conflicts occur, handle them carefully (see below)
- Continue until rebase is complete
- If step 1 created a stash, restore it with
git stash pop --index:- Restore the stash only after the rebase succeeds.
- If restoration conflicts, preserve the stash, report the conflicts, and leave the affected files for manual resolution.
Handling conflicts:
- BEFORE resolving any conflict, understand what changes were made to each conflicting file in the target branch
- For each conflicting file, run
git log -p -n 3 <target> -- <file>to see recent changes to that file in the target branch - The goal is to preserve BOTH the changes from the target branch AND our branch's changes
- After resolving each conflict, stage the file and continue with
git rebase --continue - If a conflict is too complex or unclear, ask for guidance before proceeding
Comments
Markdown supported