Files
holocron/plugins/git/skills/git-remotes/SKILL.md
Defame1297 38eb0745b7 refactor(git-remotes): retrofit to the ADR-0020 context contract
Description 582 -> 237 chars, body 1217 -> 290 words. The single remotes.md
splits into config, fetch, push, and pull flow files.

Restores the confirm: true token to the force-push gate -- it is the git
plugin's cross-skill contract, gated on by git-orchestrate and git-branches.
Moves push.md's worked example off main, which the skill's own Step 1
refuses, and restores the never-bare---force directive.
2026-08-30 13:10:53 +00:00

2.4 KiB

name, description, metadata
name description metadata
git-remotes 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`.
category source_keys
git-workflow
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.
  • Pull defaults shift between Git versions — older ones default to merge, newer to --ff-only. Set pull.ff only explicitly rather than trusting 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:

{
  "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.