sync-fork
Skill1 starsChanged 10 days agoMITView on GitHub
Sincroniza un fork con el repositorio upstream del que salió: autodetecta el parent real con `gh repo view --json parent` en vez de adivinarlo, añade el remoto `upstream` si falta, hace fetch, integra con **merge** (no rebase) para no reescribir el histórico de un fork compartido, y empuja al fork. Ante conflicto, árbol sucio o divergencia **se detiene y lo explica**: nunca hace force-push ni reset. Úsalo cuando el usuario diga "sincroniza el fork", "actualizar fork", "mi fork está atrasado", "trae los cambios del original", "sync fork", "update my fork", "my fork is behind", "pull changes from upstream", o cuando esté en un repo con relación de fork y quiera ponerse al día con el original. Funciona con `gh` para autodetectar, o con la URL del upstream a mano.
- Commits and pushes
2 other projects use a version of this.
Adopted by
Most recently taken up by
- fazer-ai/chatwoottheir own version, first seen Oct 8, 2026
- shhac/skillstheir own version, first seen Aug 31, 2026
Other versions2 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 2
- fazer-ai/chatwoot★ 164same name
- shhac/skills★ 4same name
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
- git-pushSkill
- 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
- nombre-del-skillSkill
- version-bumpSkill
- web-snapSkill
- yaml-controlSkill
The file
Files
sync-fork — poner un fork al día con su upstream
Un fork no recibe commits solo. Pasan semanas, el original avanza, y el fork queda detrás justo cuando hace falta abrir un PR — que entonces llega con conflictos o con cambios que ya estaban resueltos arriba.
Lo que hace daño aquí no es el fetch: es resolver mal el origen de la verdad (adivinar la URL del upstream) y elegir mal la forma de integrar (un rebase que reescribe lo que otros ya clonaron).
Alcance y permisos
| Capacidades del script | ninguna — es un skill de criterio, sin script ejecutable |
| Qué toca | Lee el parent real del fork con gh, consulta la rama por defecto e integra con merge. |
| Qué nunca toca | No hace rebase: un fork público puede estar clonado por otros, y reescribir su histórico les rompe el suyo. |
| 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 histórico de la rama.
1 · Detectar el upstream
Por orden de preferencia:
A. Autodetección con GitHub CLI — lee el parent directamente de GitHub, sin que el usuario dicte nada:
gh repo view --json parent --jq '.parent.url'B. Remoto ya configurado:
git remote get-url upstreamSi existe, úsalo y salta al paso 3.
C. Preguntar al usuario si ninguna de las dos funciona. No inventes la URL a partir del nombre del repo: un fork puede venir de una organización distinta de la que sugiere el nombre.
2 · Añadir el remoto (solo si falta)
git remote add upstream <upstream-url>Si ya existe un remoto upstream apuntando a otra URL, no lo pises: avisa y
pregunta. Ese remoto puede ser deliberado.
3 · Comprobar el estado antes de tocar el histórico
git status --short
git branch --show-currentSi el árbol está sucio, para: sugiere git stash y retoma después. Integrar
sobre cambios sin commitear convierte un conflicto de merge en una pérdida.
4 · Fetch
git fetch upstream5 · Integrar con merge
git merge upstream/<rama-por-defecto>La rama por defecto del upstream se averigua, no se asume:
git remote show upstream | grep 'HEAD branch'; como último recurso, main y
luego master.
Merge por defecto, no rebase. Un fork es público: alguien puede haberlo
clonado o tener un PR abierto contra él, y un rebase reescribe esos commits. Si
el usuario pide rebase explícitamente, usa git rebase upstream/<rama> y dilo
en el reporte.
Si git merge sale con código distinto de 0, detente: enumera los ficheros
en conflicto para que el usuario los resuelva. No fuerces, no resetees, no
abortes por tu cuenta sin decirlo.
6 · Empujar al fork
git push origin <rama-actual>Si el push se rechaza porque la rama local está detrás de origin, el fork ha
divergido por su cuenta (commits hechos en la web, otra máquina, otro
colaborador). Avisa y explica las opciones; no hagas force-push.
7 · Confirmar
Reporta: cuántos commits entraron (git rev-list --count HEAD@{1}..HEAD), el
nuevo HEAD, y si el push salió bien. Si el merge dijo «Already up to date», dilo
tal cual: no hay nada que empujar.
Plataformas
Son llamadas estándar a git y gh: idénticas en Bash y en PowerShell. En
Windows ejecútalas con la herramienta de PowerShell; en Linux o macOS, con Bash.
Casos borde
- No es un fork. Si
gh repo viewno devuelve parent, dilo y pide la URL del upstream en vez de asumir una. ghno instalado o sin sesión. Cae al remotoupstreamexistente o a preguntar.- Árbol sucio. Avisa y sugiere stash; no integres encima.
- Ya al día. Confirma y termina: no hay push.
- Rama por defecto renombrada (
master→main) en el upstream: resuélvela congit remote show, no por convención. - Fork de un repo archivado o borrado. El fetch falla; repórtalo como tal.
Límites
- No resuelve conflictos. Los detecta, los enumera y se aparta: resolverlos es criterio humano sobre el contenido.
- No hace force-push ni reset en ninguna rama, ni para «arreglar» una divergencia. Eso lo decide el usuario.
- No sincroniza todas las ramas: trabaja sobre la rama actual. Varias ramas, varias pasadas.
- No toca tags ni releases del fork.
- No audita qué trae el upstream. Un merge incorpora código ajeno: si eso
importa, pásalo después por
security-audit. - No abre PRs — eso es
git-push(escenario H).
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.

