# Rebase Main

> Safely update local main from origin/main, rebase the current react-native-nitro-sound work branch, resolve conflicts without losing staged, unstaged, untracked, ignored, or generated work, and restore the original working-tree state. Use when asked to pull main, rebase onto main, or fix a stuck rebase.

- Skill: `hyochan/rebase-main` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add hyochan/rebase-main`
- Raw SKILL.md: https://api.skillmd.com/api/skills/hyochan/rebase-main/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Web & Frontend, Coding & Dev Tools
- Author: hyochan (https://skillmd.com/u/hyochan)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/hyochan/rebase-main

---


# Rebase Main

Update `main`, rebase the work branch, and preserve all pre-existing work. Do
not commit, push, or force-push unless the user separately authorizes it.

## Establish State

1. Read `AGENTS.md` and record the current branch, `HEAD`, upstream, worktrees,
   staged changes, unstaged changes, untracked files, and relevant ignored local
   files.
2. Inspect `.git` state for an active rebase, merge, cherry-pick, revert, or
   bisect. Do not start a second operation.
3. Stop if detached, already on `main` for a rebase request, or the target base
   cannot be identified safely.
4. Use `origin/main` only after confirming both refs exist.

## Safeguard Work

If tracked or untracked changes exist, create one clearly named stash with
`--include-untracked`; never use `--all`. Record the stash object and verify the
worktree is clean. Fingerprint important ignored files and check that neither
destination tree tracks their exact paths before switching.

If a stale `.git/index.lock` or `.git/HEAD.lock` blocks progress, confirm its
age and verify no Git process owns it before removing only that exact lock. If
an earlier operation is active, inspect its head, target, todo, and conflicts;
continue or abort only when that preserves the recorded intent.

## Update And Rebase

1. Run `git fetch --prune origin`.
2. Check out `main` without overwriting ignored files.
3. Run `git merge --ff-only origin/main`. Stop on local/remote divergence; do
   not reset or create a merge commit.
4. Confirm `main` and `origin/main` resolve to the same commit.
5. Check out the recorded work branch with the same ignored-path guard.
6. Run `git rebase origin/main`.
7. For each conflict, inspect base, main, and work-branch intent. Regenerate
   `nitrogen/generated/**` through `yarn nitrogen` or `yarn prepare`; never pick
   a blanket side for generated output.

Never use `git reset --hard`, `git checkout --`, or `git clean` as recovery.

## Restore And Verify

Apply the safeguard stash with its index. Resolve restoration conflicts, then
compare staged, unstaged, untracked, and ignored state with the initial
snapshot. Drop only the named stash after restoration is exact.

Run `git status`, `git diff --check`, and the lightweight checks affected by
conflict resolution. Report old and new main/work heads. If a published branch
was rewritten, explain that a later `git push --force-with-lease` is required
but do not perform it without authorization.

