update-from-upstream-main

$npx mdskill add remotion-dev/remotion/update-from-upstream-main

Syncs the current Remotion branch with the latest canonical main.

  • Solves updating a feature branch or local main without rewriting history.
  • Depends on git commands and the remotion-dev/remotion remote.
  • Inspects repo state, stashes changes, and selects the canonical remote.
  • Fetches upstream and merges or fast-forwards to deliver updated branch.

SKILL.md

.github/skills/update-from-upstream-mainView on GitHub ↗
---
name: update-from-upstream-main
description: Update the current Remotion branch with the latest canonical main branch. Use when asked to update or sync from upstream main, merge the latest main into a feature branch, fast-forward local main, or bring a pull request branch up to date without rewriting published history.
---

# Update From Upstream Main

Update from the canonical `remotion-dev/remotion` repository while preserving local work and published branch history.

## Workflow

1. Inspect the repository before changing it:

   ```bash
   git status --short --branch
   git branch --show-current
   git remote -v
   ```

   Stop and report the state if an operation such as a merge or rebase is already in progress. A detached checkout is supported and must not prevent the update.

   If the working tree contains staged, unstaged, or untracked changes, stash them automatically and continue:

   ```bash
   git stash push --include-untracked --message "update-from-upstream-main: preserve local changes"
   git rev-parse stash@{0}
   ```

   Record the created stash's commit ID so the same entry can be restored later. Do not treat uncommitted changes as a reason to stop. Do not include ignored files unless the user explicitly asks.

2. Select the canonical remote whose URL points to `remotion-dev/remotion`. Prefer `upstream` when it exists; otherwise use `origin`. If neither remote points to the canonical repository, stop and ask before adding or changing a remote.

3. Fetch the latest main branch without changing the working tree:

   ```bash
   git fetch <canonical-remote> main
   ```

4. Update the checked-out branch:
   - On `main`, require a fast-forward:

     ```bash
     git merge --ff-only <canonical-remote>/main
     ```

   - On a feature branch or detached checkout, merge main without opening an editor:

     ```bash
     git merge --no-edit <canonical-remote>/main
     ```

   Do not rebase, reset, or force-push. A merge keeps published branch history intact and can be pushed normally; on a detached checkout, report that the resulting commit is still detached.

5. If the merge conflicts, resolve each file deliberately and preserve both the feature intent and upstream changes. Do not accept `ours` or `theirs` across the entire merge. Check every resolved file for leftover conflict markers before staging:

   ```bash
   rg -n '^(<{7}|={7}|>{7})' -- <resolved-files>
   ```

   Inspect and remove any matches that are conflict markers. Then stage only the resolved files and finish the merge with:

   ```bash
   git commit --no-edit
   ```

6. If step 1 created a stash, reapply it after the upstream update is complete:

   ```bash
   git stash apply --index <recorded-stash-commit>
   ```

   Reapply the stash before reporting success or before stopping after a fetch or merge failure, provided no Git operation is still in progress. If applying the stash causes conflicts, resolve them deliberately without rerunning `git stash apply`. The stash entry remains as a recovery copy. After confirming that all stashed changes, including untracked files and their staged state, were restored, find the entry with the recorded commit ID in `git stash list --format='%gd %H'` and drop only that entry. Never pop or drop a pre-existing stash.

7. Validate the result. Always run `git diff --check` and `git diff --cached --check`. If conflicts were resolved or the combined changes could affect behavior, run the relevant package tests. For broad changes, run:

   ```bash
   bun run build
   bun run stylecheck
   ```

8. Push only when the user asked to update a published branch or pull request. Use a normal push and stop if it is rejected:

   ```bash
   git push <canonical-remote> HEAD
   ```

   Never force-push.

9. Report the previous and new commit, whether the checkout is detached, whether the update was a fast-forward or merge, whether local changes were stashed and successfully reapplied, any conflicts resolved, validation performed, and whether the branch was pushed.

More from remotion-dev/remotion

SkillDescription
add-bugAdd a new Remotion bug entry to packages/bugs/api/[v].ts. Use when the user describes a bug and affected Remotion versions that should be surfaced through the bugs API.
add-cli-optionAdd a new Remotion CLI or config option by creating an AnyRemotionOption, registering CLI parsing, wiring config setters, and updating documentation. Use when adding or converting command-line flags or Remotion options.
add-effectAdd a new effect to @remotion/effects, including implementation, package exports, docs, demos, preview images, Remotion skill updates, formatting, and builds.
add-expertAdd a new expert to the Remotion experts page
add-new-packageAdd a new package to the Remotion monorepo, including package scaffolding, monorepo registration, documentation, build scripts, and release checklist updates. Use when creating a new @remotion package.
add-sfxAdd a new sound effect to @remotion/sfx
add-webcodecs-bugAdd a browser WebCodecs bug to the Remotion Mediabunny WebCodecs bugs docs page. Use when given a Chromium, WebKit, or Firefox issue URL that should be tracked in packages/docs/docs/mediabunny/webcodecs-bugs.mdx, especially when needing to look up the issue title, filing date, reporter, and resolution state before editing the MDX table.
canvas-capture-extensionRebuild, install, and reload the private Remotion Canvas Capture unpacked Chrome extension. Use when the extension needs to be restored after a Codex worktree was deleted, rebuilt after source changes, moved to its durable install directory, or reloaded in Chrome or Chrome Canary.
checkoutCheckout a requested branch or ref in the Remotion repo, rename the current task to the associated PR title when running in Codex, then install dependencies and build. Use when the user asks to checkout a ref and prepare the workspace.
convertStart the local @remotion/convert app and open it in the Codex browser. Use when the user invokes /convert or $convert, asks to launch convert.remotion.dev locally, or wants to inspect the Convert package UI.