git-workflow's description enumerated the six domains it exists to route away from, so it competed for selection with the very skills it should be handing off to. It now triggers on the case it actually serves: an interactive request whose domain is not yet clear. Also clears frontmatter drift across the plugin and removes duplicated guidance in pc-run that had diverged from its reference.
59 lines
2.3 KiB
Markdown
59 lines
2.3 KiB
Markdown
---
|
|
name: git-remotes
|
|
|
|
description: >
|
|
Use when a git operation — remote config, fetch, push, or pull — touches a
|
|
remote, even when the user does not name it.
|
|
Not local commits -> `git-commits`.
|
|
Not local branches -> `git-branches`.
|
|
Not submodule pointers -> `git-submodules`.
|
|
|
|
metadata:
|
|
category: git
|
|
source_keys:
|
|
- git-scm-remote-docs
|
|
- git-scm-fetch-docs
|
|
- git-scm-push-docs
|
|
- git-scm-pull-docs
|
|
- context7-git-htmldocs
|
|
---
|
|
|
|
## Gotchas
|
|
|
|
- **`--force-with-lease` alone is not safe** — background processes (IDE plugins, cron jobs) running `git fetch` silently defeat the protection. Combine it with `--force-if-includes`, or pin the explicit `--force-with-lease=<ref>:<sha>` form.
|
|
- **Prune does not touch tags by default** — `git fetch --prune` leaves orphaned tags behind. Use `--prune --prune-tags`, or set `fetch.pruneTags true`.
|
|
- **Set `pull.ff only` explicitly** — do not trust the installed default.
|
|
|
|
## Step 1 — Clear the force-push gate
|
|
|
|
`main` and `master` are a hard refusal: decline a force-push targeting either, whatever confirmation accompanies it, because no local approval can restore what the remote loses. On any other branch, `git push --force` and `-f` run only after the caller passes `confirm: true` for that specific push — for a human caller, prompt instead of failing.
|
|
|
|
## Step 2 — Dispatch
|
|
|
|
Read the row matching the operation, and only that row — each file is self-contained. A task spanning two operations reads both.
|
|
|
|
| Operation | Read |
|
|
|---|---|
|
|
| Add, remove, rename, inspect, or re-point a remote; tracking, mirror, and `set-url` config | `references/remote-config.md` |
|
|
| Fetch or prune remote-tracking refs; shallow or partial fetch | `references/fetch.md` |
|
|
| Push branches or tags; refspecs; force-push | `references/push.md` |
|
|
| Pull — integrate remote changes into the current branch | `references/pull.md` |
|
|
|
|
## Step 3 — Return format
|
|
|
|
For agent callers, return:
|
|
|
|
```json
|
|
{
|
|
"success": true,
|
|
"operation": "push",
|
|
"remote": "origin",
|
|
"branch": "main",
|
|
"output": "...",
|
|
"warnings": ["force-with-lease not confirmed"],
|
|
"recommendations": ["set `pull.ff only` so the default does not vary by Git version"]
|
|
}
|
|
```
|
|
|
|
On failure, set `success: false` and add an `error` field holding the root cause and a recovery suggestion.
|