--- name: rebase description: >- Rebase the current branch onto its base branch, resolve all conflicts, and verify lint, i18n, and build pass. Use when the user asks to rebase, update, or sync a branch with its upstream base. --- # Rebase Rebase the current branch onto its base branch. ## Step 1 — Determine the base branch Read [release-branches.md](../release/release-branches.md) to get the list of branches. For each branch, compute the merge-base with HEAD and count the commits between them: ```sh mb=$(git merge-base HEAD ) git rev-list --count "$mb"..HEAD ``` The base branch is whichever has the **lowest** commit count (fewest commits between the merge-base and HEAD). If counts are tied, prefer `main`. Tell the user which base branch was detected before proceeding. ## Step 2 — Check if base branch is up to date Run `git fetch upstream ` to update the remote tracking ref (this is read-only and does not change any local branches), then compare: ```sh git fetch upstream git rev-list --count ..upstream/ ``` If the count is **0**, the local base branch is up to date — skip ahead to **Step 3**. If the count is **greater than 0**, tell the user how many commits their local base branch is behind the remote and **ask whether they want to pull**. Do NOT pull without the user's consent. - If the user says **yes**, run `git checkout && git merge --ff-only upstream/ && git checkout -` then continue to Step 3. - If the user says **no** (or to skip), continue to Step 3 using the local base branch as-is. ## Step 3 — Rebase Save the current commit hash before rebasing so it can be used for comparison later: ```sh pre_rebase_head=$(git rev-parse HEAD) git rebase ``` If the rebase completes cleanly, skip to **Step 4**. ### Resolving conflicts When conflicts occur, repeat this loop until the rebase finishes: 1. Run `git diff --name-only --diff-filter=U` to list conflicting files. 2. Read each conflicting file, examine the conflict markers (`<<<<<<<`, `=======`, `>>>>>>>`), and resolve them by keeping the correct version. Prefer incoming (base-branch) changes for dependency updates and lockfile entries; prefer the current branch's changes for feature code — but use judgment and the surrounding context to decide. 3. Stage resolved files: `git add `. 4. Continue: `git rebase --continue`. 5. If new conflicts appear, go back to substep 1. ## Step 4 — Fix lint, i18n, and build After the rebase succeeds, run the following commands **in order**, fixing any errors before moving on: 1. `npm run lint-fix` — fix lint/formatting issues automatically. 2. `npm run i18n` — regenerate locale files. 3. Before building, check whether `npm install` needs to be run. Compare the current `package-lock.json` against the saved pre-rebase commit: ```sh git diff "$pre_rebase_head" -- package-lock.json ``` If there are changes, run `npm install` before continuing. 4. `npm run build` — ensure the project compiles. If any step produces errors that `lint-fix` did not auto-resolve, fix them manually and re-run the failing command until it passes. ## Step 5 — Report Summarize what happened: - Which base branch was used - How many conflicts were resolved (and in which files) - Whether lint, i18n, and build passed cleanly or required fixes