git-push
Skill1 starsChanged 9 days agoMITView on GitHub
Enruta una subida a GitHub al escenario correcto **después de leer el estado real del repo** (`git status`, `remote -v`, rama, `rev-list --left-right`), en vez de asumir que siempre es «commit y push»: repo sin remoto, rama sin upstream, rama detrás del remoto, árbol sucio, árbol limpio con commits pendientes, amend, tag/release y apertura de PR. Encadena los guardias del toolkit antes de escribir en el histórico, indexa con **rutas explícitas** (nunca `git add .` a ciegas), delega el tag/release en `version-bump` y jamás hace force-push a `main`/`master` sin confirmación. Úsalo cuando el usuario diga "sube mis cambios", "sube esto", "publica los cambios", "primer push", "crear PR", "corregir el último commit", "push", "commit and push", "create pull request", "amend", "push tag", "pull and push". El usuario no tiene que decir en qué caso está: el skill lo determina.
- Reads credentials
- Deletes or force-pushes
- Commits and pushes
18 other projects use a version of this.
Adopted by
Most recently taken up by
- Hexi1997/skillstheir own version, first seen Nov 7, 2026
- mattmireles/gemma-tuner-multimodaltheir own version, first seen Nov 1, 2026
- MYQFJ23333/git-claudetheir own version, first seen Nov 1, 2026
- solplum/agent-git-workflow-skillstheir own version, first seen Oct 15, 2026
- cognis-digital/skillsmiththeir own version, first seen Oct 11, 2026
- fanswoo/skillstheir own version, first seen Oct 11, 2026
Other versions18 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 18
- mattmireles/gemma-tuner-multimodal★ 1.5ksame name
- yunshu0909/yunshu_skillshub★ 760same name
- jerrywu001/cc-sessions-viewer★ 415same name
- chengkj99/kj-skills★ 14same name
- phanghonghao/THU-Awesome-Skills★ 8same name
- pgnzbl-ux/crucible★ 4same name
- rohanhong/tmpl.general-repo★ 3same name
- solplum/agent-git-workflow-skills★ 3same name
- mir-am/skills-agents-ai-coding★ 2same name
- MYQFJ23333/git-claude★ 2same name
8 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository22 other files it gives its agents.
- bitcoin-custody-auditSkill
- clone-repoSkill
- docker-cleanupSkill
- docker-compose-doctorSkill
- functional-user-flow-testerSkill
- md-lint-fixSkill
- md-to-docSkill
- pre-commit-guardSkill
- preliminary-product-testerSkill
- pre-push-guardSkill
- python-deps-pinningSkill
- python-lint-guardSkill
- python-version-controlSkill
- release-evidence-auditorSkill
- repo-coherence-auditSkill
- security-auditSkill
- software-resilience-state-testerSkill
- sync-forkSkill
- nombre-del-skillSkill
- version-bumpSkill
- web-snapSkill
- yaml-controlSkill
The file
Files
git-push — subida a GitHub con el escenario correcto
Casi todo el daño que se hace al subir código viene de ejecutar el flujo
equivocado: hacer git push cuando la rama no tiene upstream, commitear sobre
un árbol que está detrás del remoto, o --force en main para «arreglar» una
divergencia. El estado del repo decide el flujo, así que primero se lee.
Alcance y permisos
| Capacidades del script | ninguna — es un skill de criterio, sin script ejecutable |
| Qué toca | Invoca git y gh para indexar por rutas explícitas, commitear, pushear y abrir PR. |
| Qué nunca toca | No usa git add . a ciegas, no fuerza sobre main/master sin confirmación explícita, y nunca usa --force pelado — solo --force-with-lease. |
| Herramientas retiradas | WebFetch, WebSearch |
No declara allowed-tools, y es deliberado: ese campo preaprueba herramientas —se salta la confirmación durante el turno que invoca el skill— en vez de limitarlas. Declararlo aquí no acotaría nada: quitaría la confirmación del usuario. disallowed-tools sí retira herramientas del pool mientras el skill está activo, y ahí es donde se acota de verdad.
Escribe en el remoto, que es irreversible para los demás, así que cada escritura se confirma.
Paso 0 — Leer el estado, siempre
git status --short
git remote -v
git branch --show-current
git log --oneline -3
git rev-list --count --left-right @{upstream}...HEAD 2>/dev/null || echo "no-upstream"| Lo que ves | Escenario |
Sin .git o sin remoto configurado | → A. Repo nuevo |
La rama no tiene upstream (no-upstream) | → B. Rama nueva |
Cuenta de «detrás» > 0 (lado izquierdo de --left-right) | → C. Detrás del remoto |
| Cambios sin commitear | → D. Commit + push |
| Árbol limpio y commits por delante | → E. Solo push |
| El usuario dice «amend» / «corregir el commit» | → F. Amend |
| El usuario menciona tag, release o un número de versión | → G. Tag / release |
La rama no es main/master | → sugiere H. Abrir PR tras el push |
Los escenarios se encadenan (D → E → H es el caso típico).
Paso 0.5 — Pasar los guardias antes de escribir en el histórico
Este skill no reimplementa la validación: la invoca.
- Antes de commitear (escenarios A, D, F):
pre-commit-guardsobre lo staged. - Antes de empujar (B, C, E, F, G):
pre-push-guardsobre el diff contraorigin/<rama>.
Si el guardia no está instalado, degrada con aviso y continúa — igual que hacen los propios guardias con sus dependencias. Si un guardia falla, para: el objetivo es que el fallo cueste un minuto en local en vez de un ciclo de CI.
[!IMPORTANT] No pases
--no-verifyni ninguna variante que salte los hooks, ni para «desbloquear» un push. Si un hook falla, el problema es lo que el hook encontró.
Escenario A — Repo nuevo (sin remoto)
git init
git status --short # revisa QUÉ vas a subir antes de indexar
git add <rutas explícitas> # nunca `git add .` a ciegas
git commit -m "<mensaje>"
gh repo create <nombre> --public --source=. --remote=origin --pushEl primer commit de un repo nuevo es donde se filtran .env, claves y binarios
pesados, y donde cuesta más sacarlos después (quedan en el histórico). Revisa el
listado completo, confirma que hay .gitignore, y indexa por rutas.
<nombre> por defecto es el de la carpeta. Pregunta público o privado antes
de crear: no lo decidas tú.
Escenario B — Rama nueva (sin upstream)
git push --set-upstream origin <rama>Después ofrece abrir el PR (escenario H).
Escenario C — Detrás del remoto
El remoto tiene commits que no están en local; integrar a ciegas produce conflictos o pisa trabajo ajeno.
git status --short # si hay cambios sin commitear:
git stash # guárdalos primero
git pull --rebase origin <rama> # histórico lineal en tu propia rama
git stash pop # recuperaSi el pull --rebase entra en conflicto: para, enumera los ficheros y deja que
el usuario resuelva. No fuerces nada. Luego encadena a D o E.
Escenario D — Commit + push (árbol sucio)
Lee el diff antes de redactar el mensaje:
git diff --stat
git diff --cached --statMensaje en formato Conventional Commits — <tipo>(<alcance>): <descripción>,
tipos feat, fix, refactor, docs, chore, test, style, build.
Enséñaselo al usuario y espera su visto bueno; si da otro, usa el suyo.
git add <rutas explícitas>
git commit -m "<mensaje aprobado>"Encadena a E.
Escenario E — Push (árbol limpio, commits por delante)
git push origin <rama>Si el push se rechaza por divergencia: no fuerces en main/master.
Explica la situación y ofrece git pull --rebase si la rama es compartida, o
git push --force-with-lease solo si es la rama propia del usuario y lo
confirma explícitamente.
Escenario F — Amend del último commit
git add <rutas explícitas>
git commit --amend --no-edit # --edit si hay que cambiar el mensaje
git push --force-with-lease origin <rama>--force-with-lease y no --force: aborta si el remoto cambió desde el último
fetch, en vez de pisar lo que otro subió. Si la rama es main o master,
advierte que reescribir ahí es destructivo y pide confirmación explícita. Si el
commit ya está empujado y la rama es compartida, propón un commit nuevo en
vez del amend.
Escenario G — Tag / release
Subir un tag es publicar una versión, y eso arrastra coherencia: badges, manifests, documentación. Esa mitad no es de este skill.
- Delega en
version-bumpla decisión de versión y la sincronización de los marcadores ACTUAL (conservando las referencias históricas del changelog). - Con el repo ya coherente y commiteado:
git tag -a <versión> -m "Release <versión>"
git push origin <versión>
gh release create <versión> --title "Release <versión>" --generate-notesPide el número de versión si no lo dieron. No inventes el salto semver: eso lo
decide el usuario o version-bump.
Escenario H — Abrir PR tras el push
gh pr create --title "<título>" --body "<resumen>" --base mainDeriva el título de la rama (feature/add-login → «Add login») o del último
commit. Pregunta la rama base si no es main. Muestra la URL al terminar.
Reglas del mensaje de commit
tipo(alcance): descripción— minúsculas, sin punto final, máx. 72 caracteres el asunto.- Lee
git diff --statpara acertar el alcance. - Si el cambio toca muchas áreas,
chore: …antes que inventar un alcance falso. - Nunca mensajes genéricos («update files», «cambios», «fix»).
Reglas de seguridad (no se saltan)
- Nunca
--forceamain/mastersin confirmación explícita del usuario. - Nunca
git reset --hardsin avisar antes de lo que se pierde. - Nunca
git add ./git add -Aa ciegas:git statusprimero, rutas después. - Si aparecen
.env,*.key,*.pem,id_rsa,credentials*o similares en el estado, avisa antes de indexar. - Si un fichero supera 50 MB, avisa antes de empujar (GitHub lo rechaza) y sugiere Git LFS.
- Nunca
--no-verifyni saltos de hooks. gh repo create: público o privado lo decide el usuario, no el skill.
Límites
- No decide la versión de un release — eso es
version-bump; aquí solo se crea y empuja el tag ya acordado. - No valida el contenido: la validación es de
pre-commit-guard,pre-push-guard,yaml-control,md-lint-fixypython-lint-guard. Este skill los encadena, no los sustituye. - No resuelve conflictos ni reescribe histórico ajeno.
- No gestiona credenciales ni tokens: delega en
gitygh. - No borra ramas remotas, releases ni tags.
- No configura protecciones de rama, secretos ni Actions del repositorio.
- Depende de
ghpara crear repos, releases y PRs (escenarios A, G, H); singh, esas partes salen como instrucciones para el usuario.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

