Files
holocron/plugins/git/.apm/skills/git-remotes/SKILL.md
Defame1297 2c6ce438b6 refactor(git): normalize rtk-prefix usage, add metadata.version
Two bundled fixes across the same nine skills, since both touch the
same files.

Issue #113: skill prose used rtk git and bare git inconsistently for
the same operations, with no stated rule for which applied where.
Executable instructed commands (a dispatch-table "Run" cell, a fenced
code-block procedure, an imperative step) now consistently use rtk
git; illustrative or referential mentions -- naming a flag's behavior,
quoting a doc heading, warning against an anti-pattern -- stay bare
git. Documented in the new plugins/git/README.md, scoped to this
plugin only: gitea-* skills talk to the server over MCP tools and
carry no git/rtk mentions at all.

Also the git-plugin slice of #127: metadata.version added to the
eight skills that lacked it. git-commits already had one and is
untouched.

Fixes: #113
Fixes: #127
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EeH8SCbcrCAQrtymkNuhKP
2026-09-07 20:36:49 +00:00

61 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 log or bisect queries -> `git-history`.
Not submodule pointers -> `git-submodules`.
metadata:
version: "1.0.0"
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, `rtk 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.