rebase-latest-main — Claude Code skill: rebase onto latest main
A skill that walks the agent through fetching origin/main, rebasing the current branch and resolving conflicts. Handy when your branch has drifted behind main.
npx skills add dyoshikawa/rulesync --skill rebase-latest-main -a claude-codeWhat rebase-latest-main does
The skill lays out a git procedure step by step. First the agent checks the current branch and looks for uncommitted changes. If any exist, it either commits them or asks you how to proceed — commit, stash or abort.
Then come git fetch origin main and git rebase origin/main. On conflicts the agent lists files with git diff --name-only --diff-filter=U, reads each one, compares both sides and stages the fix with git add <resolved-file> before continuing the rebase. If it cannot sort things out, it shows the conflict markers and waits for your call; git rebase --abort rolls back.
After a clean rebase the skill pushes with git push --force-with-lease, which is safer than --force because it will not clobber someone else's work. Worth knowing: if your workflow forbids force-pushing a shared branch, you skip that step by hand. At the end the agent reports how many commits moved and which conflicts it closed.
What it helps with
- pull the latest origin/main into your branch
- work through rebase conflicts
- check for uncommitted changes before rebasing
- roll back a failed rebase with git rebase --abort
- update the remote branch after moving commits
Example prompts for the agent
- rebase onto the latest main
- update my branch with the latest main
- sync my branch with upstream
How to install rebase-latest-main
1Skills CLI (Vercel)
npx skills add dyoshikawa/rulesync --skill rebase-latest-main -a claude-code2Manually: put the files in place
~/.claude/skills/rebase-latest-main/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/rebase-latest-main/
1Skills CLI (Vercel)
npx skills add dyoshikawa/rulesync --skill rebase-latest-main -a codex2Manually: put the files in place
.agents/skills/rebase-latest-main/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add dyoshikawa/rulesync --skill rebase-latest-main -a cursor2Manually: put the files in place
.cursor/skills/rebase-latest-main/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install dyoshikawa/rulesync rebase-latest-main2Manually: put the files in place
.github/skills/rebase-latest-main/SKILL.md1Skills CLI (Vercel)
npx skills add dyoshikawa/rulesync --skill rebase-latest-main -a gemini-cli2Platform CLI
gemini skills install https://github.com/dyoshikawa/rulesync --path .rulesync/skills/rebase-latest-mainManually: put the files in place
.devin/skills/rebase-latest-main/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add dyoshikawa/rulesync --skill rebase-latest-main -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about rebase-latest-main
How do I install rebase-latest-main in Claude?
Run npx skills add dyoshikawa/rulesync --skill rebase-latest-main -a claude-code. The skill lands at ~/.claude/skills/rebase-latest-main/SKILL.md.
What does rebase-latest-main do?
It drives the agent through checking the branch and working tree, git fetch origin main, the rebase, conflict resolution and a --force-with-lease push.
Does the skill commit my changes on its own?
No. When it finds uncommitted changes it asks what to do: commit them, stash them or abort the operation.
Source text
SKILL.md · MIT
---
name: rebase-latest-main
description: >-
Fetch latest origin/main and rebase it onto the current branch, resolving
conflicts if necessary. Use when the user wants to rebase on main, update
their branch with latest main, or sync with upstream.
targets:
- "*"
---
# Rebase Latest Main
Fetch the latest `origin/main` and rebase it onto the current working branch.
## Step 1: Verify Current State
1. Check the current branch:
```bash
git branch --show-current
```
2. Ensure there are no uncommitted changes:
```bash
git status --porcelain
```
If there are uncommitted changes, either:
- Commit them first, or
- Ask the user how to proceed (commit, stash, or abort)
## Step 2: Fetch Latest Changes
Fetch the latest changes from the remote:
```bash
git fetch origin main
```
## Step 3: Rebase onto origin/main
Start the rebase:
```bash
git rebase origin/main
```
### If rebase succeeds without conflicts:
Proceed to Step 5.
### If conflicts occur:
1. Identify conflicting files:
```bash
git diff --name-only --diff-filter=U
```
2. For each conflicting file:
- Read the file content to understand the conflict
- Analyze both versions (HEAD and origin/main)
- Resolve the conflict by choosing the appropriate changes or merging them
- Stage the resolved file:
```bash
git add <resolved-file>
```
3. Continue the rebase:
```bash
git rebase --continue
```
4. Repeat until all conflicts are resolved and rebase is complete.
## Step 4: Handle Rebase Failure
If unable to resolve conflicts automatically:
- Show the conflicting files and conflict markers to the user
- Ask for guidance on how to resolve
- If the user wants to abort:
```bash
git rebase --abort
```
## Step 5: Push Changes
After successful rebase, force push to update the remote branch:
```bash
git push --force-with-lease
```
Note: `--force-with-lease` is safer than `--force` as it prevents overwriting others' work.
## Step 6: Report Result
Summarize the operation:
1. Number of commits rebased
2. Any conflicts that were resolved
3. Confirmation that the branch is now up-to-date with origin/main
© dyoshikawa · MIT · dyoshikawa/rulesync