From claude-resources
Remote git write discipline: push, force-push policy, upstream tracking, tag push. Part of the opt-in ops-skills plugin. Use ONLY when session context has ops_enabled=true. Pair with core/git-workflow for local discipline.
npx claudepluginhub deandum/claude-resources --plugin go-skillsThis skill uses the workspace's default tool permissions.
Pushing to a remote is the first irreversible step — branches become visible to collaborators, tags become references for builds, and force-pushes can destroy other people's work. This skill covers the discipline for those moments. For local git hygiene (commits, branches, rebase), see `core/git-workflow`.
Searches, retrieves, and installs Agent Skills from prompts.chat registry using MCP tools like search_skills and get_skill. Activates for finding skills, browsing catalogs, or extending Claude.
Searches prompts.chat for AI prompt templates by keyword or category, retrieves by ID with variable handling, and improves prompts via AI. Use for discovering or enhancing prompts.
Guides agent creation for Claude Code plugins with file templates, frontmatter specs (name, description, model), triggering examples, system prompts, and best practices.
Pushing to a remote is the first irreversible step — branches become visible to collaborators, tags become references for builds, and force-pushes can destroy other people's work. This skill covers the discipline for those moments. For local git hygiene (commits, branches, rebase), see core/git-workflow.
ops_enabled=false — do not push, report the intended push as a follow-up insteadcore/git-workflow firstBefore git push, confirm:
Pushing is publication. Treat it accordingly.
First push of a new branch: git push -u origin feature/slug. The -u (or --set-upstream) is intentional — it links the local branch to the remote. Subsequent pushes can use bare git push.
If you omit -u on the first push, you will get a reminder. Do not copy-paste the reminder blindly — confirm the branch name matches before running it.
Force-push (git push --force or --force-with-lease) rewrites remote history. The blast radius:
Rules:
main, master, release/*, or any branch with protection rulesgit log origin/<branch> first — you might overwrite work you haven't seen--force-with-lease over --force — it aborts if the remote moved since your last fetchTags are not pushed by default. After git tag v1.2.3, the tag exists only locally. To publish: git push origin v1.2.3 (not --tags, which pushes every local tag including scratch tags).
Never move a published tag. If the release was wrong, cut a new version. Moved tags break checksums, builds, and downstream consumers.
If a push is rejected (non-fast-forward, protected branch, hook failure), stop and investigate. Do not retry with --force. The rejection is information. Fix the cause — usually by fetching, rebasing, and re-running — not by overriding the check.
| Shortcut | Reality |
|---|---|
| "I'll force-push to clean up — nobody else is on this branch." | Check git log origin/<branch> first. You might be wrong about "nobody else". |
| "The PR reviewers can just re-pull after my force-push." | They won't — their review comments will orphan. Announce first. |
"I'll push tags with --tags to save a step." | You'll push every local tag, including scratch tags. Push specific tags by name. |
"The push was rejected — let me --force through." | The rejection is usually protecting you. Read the error first. |
| "I'll push now and fix the CI failure later." | Everyone on the team gets the broken state. Fix locally, then push. |
git push --force on main, master, or any protected branchgit push --tags (usually pushes too many)--force-with-lease--force immediately--no-verify to bypass pre-push hooksops_enabled=true confirmed in session context before any push command--force-with-lease, not --force, and not on a protected branch--tags bulkops_enabled=false: push reported as a follow-up, not executed