Git sync workspace
Skill emaraschio/cursor-commands/plugin/.cursor/skill-contracts/git-sync-workspace
Production-grade Cursor slash commands with paired skill contracts, behavioral evals, and ship-gate CI. Install as a user plugin.
npx -y skills add emaraschio/cursor-commands --skill git-sync-workspaceAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 9 stars9 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Sync every git repo in a Cursor multi-root workspace to its remote default branch: discover roots, preflight each repo, fetch --all --prune, checkout default, pull --ff-only. Skips dirty or unsafe repos with a clear report. Use for "sync workspace", "update all repos", "back to main", or reset workspace repos to remote HEAD without losing uncommitted work.
SKILL.md
5.2 KB, as published. Nobody here has run it
Git sync workspace
Role
You sync multiple git repositories in a Cursor workspace to the latest remote default branch (main or master). This is the safe "back to base state" routine: fetch, checkout default, fast-forward pull, not a destructive reset.
When to use
Use when the user wants every repo in a multi-root workspace updated after context-switching, before cross-repo assessments, or when starting fresh work from remote HEAD. For a single broken repo (merge conflict, detached HEAD), use fix-git-issues instead.
Workflow
Run phases in order. Preflight every repo before any write.
Phase 0: Discover repos
- Workspace file (preferred): find
*.code-workspaceunder the Cursor workspace root(s). Parsefolders[].pathand resolve relative paths against the workspace file location. - Host profile (fallback): if no workspace file, read optional
profiles/repos.yamlbeside this skill (see Host overlay). - Ask (last resort): if discovery yields nothing, ask the user which paths to include. Do not scan arbitrary
~/code/*without direction. - De-duplicate paths. Keep only directories that contain a
.gitdirectory. - If the user scopes the request (e.g. "only repo1 and repo2"), filter to matching paths only.
Phase 1: Preflight (read-only, every repo)
Before modifying any repo, show a preflight table:
| Path | Current branch | Default branch | Working tree | Ahead / behind |
|---|
Collect:
- Path: repository root (absolute or workspace-relative).
- Current branch:
git branch --show-current(note detached HEAD). - Default branch: from
git symbolic-ref refs/remotes/origin/HEAD(striprefs/remotes/origin/), elsemain, elsemaster. - Working tree:
git status --porcelain(empty = clean). - Ahead / behind:
git rev-list --left-right --count @{u}...HEADwhen upstream exists.
Also detect in-progress operations (merge, rebase, cherry-pick) via git status or .git/MERGE_HEAD / .git/rebase-merge. Treat these as unsafe; skip with reason skipped_unsafe.
Dirty policy (hard rule): if the working tree is not clean, or checkout to default would strand unpushed commits the user has not explicitly accepted losing, do not modify that repo. Record skipped_dirty or skipped_unsafe and continue other repos.
Phase 2: Sync (clean repos only)
For each repo that passed preflight:
- Record
old_sha:git rev-parse HEAD(when on default) or note branch switch. git checkout <default_branch>. If local branch missing, create tracking branch fromorigin/<default>.git fetch --all --prunegit pull --ff-only. If no upstream is set, usegit merge --ff-only origin/<default>instead.
Concurrency: run git fetch --all --prune across repos in parallel with a cap of ≤ 6 concurrent shell sessions. Serialize checkout and pull per repo (one repo at a time for those steps) to avoid races.
If pull --ff-only fails (diverged local commits on default), mark the repo failed, capture stderr, and do not merge or rebase without explicit user approval.
Phase 3: Report
Emit a workspace summary with three sections:
Synced: path, branch, old_sha → new_sha (short)
Skipped: path, status (skipped_dirty, skipped_unsafe, no_remote), reason
Failed: path, failing command, stderr excerpt
Safety
- Never
git reset --hard,git clean, or force-push unless the user explicitly requests it in the same turn with per-repo confirmation. - Never checkout over a dirty working tree.
- Never discard stashes or delete branches without approval.
- Redact credentials in
git remote -voutput if shown to the user.
Host overlay
When no .code-workspace file is present, the host workspace may provide a repo list. Copy the template from profiles/repos.yaml in this skill directory:
repos:
- path: ../repo1
- path: ../repo2
Paths are relative to the file location or absolute. The agent reads this file only when workspace-file discovery fails.
Distinction from other commands
fix-git-issues: reactive troubleshooting (conflicts, detached HEAD), not bulk workspace sync.commit/commit-same-branch: start new work on a branch; this ends on default at remote HEAD.merge-open-prs: merges PRs then syncs one repo, not a workspace-wide default-branch sync.scoped-audit: read-only orchestration across a surface, not git checkout/pull.
Guardrails
- Preflight every repo and skip any dirty working tree (record
skipped_dirty); never checkout or pull over uncommitted changes. - Use
pull --ff-onlyand nevergit reset --hardor force-push without explicit per-repo approval. - Discover repos from the workspace file or user scope; do not guess paths outside discovery.
Gives 0 of the 12 instructions most pr commit review skills give
Counted across 888 of the 1,342 authors here whose files we hold, read 2026-08-06
- use conventional commits formatin 123 of 888, across 110 files
- keep subject line under 72 charactersin 60 of 888, across 46 files
- delete branches after mergein 50 of 888, across 37 files
- use imperative mood in subject linein 50 of 888, across 41 files
- use imperative mood in commit messagesin 45 of 888
- generate a conventional commit messagein 42 of 888
- make atomic commitsin 37 of 888, across 25 files
- run tests before committingin 36 of 888, across 24 files
- run project test suite to verify clean baselinein 35 of 888, across 7 files
- run detected project setup commandsin 34 of 888, across 6 files
- wrap commit body at 72 charactersin 32 of 888, across 25 files
- split unrelated changes into separate commitsin 32 of 888, across 27 files
Said here and by no other author read
- discover repositories from the workspace file
- preflight every repo before any writes
- generate a preflight status table
- detect in-progress git operations
- skip dirty working trees
- skip unsafe repositories
Grouped from the skills themselves: near-identical wordings counted once, and counted by distinct author, so one author publishing three of these counts once.