Refactor high-complexity React components in Dify frontend. Use when `pnpm analyze-component...
npx skills add testacode/llm-toolkit --skill "git-reconciler"
Install specific skill from multi-skill repository
# Description
Sincroniza branch con main/master detectando conflictos antes de mergear. Usa cuando el usuario diga "sync con main", "actualizar branch", "traer cambios de main", "reconciliar", "merge main", "hay conflictos?", o tenga branch desactualizado.
# SKILL.md
name: git-reconciler
description: Sincroniza branch con main/master detectando conflictos antes de mergear. Usa cuando el usuario diga "sync con main", "actualizar branch", "traer cambios de main", "reconciliar", "merge main", "hay conflictos?", o tenga branch desactualizado.
allowed-tools: Bash, Read
Git Reconciler
Skill para sincronizar tu branch de trabajo con main/master de forma segura, detectando conflictos antes de mergear.
Cuando usar esta Skill
- Usuario pide "actualizar branch", "sync con main", "traer cambios de main"
- Usuario pide "reconciliar", "merge main", "rebase"
- Usuario pregunta si hay conflictos con main
- Branch esta desactualizado respecto a origin/main
- Antes de crear un PR para asegurar que no hay conflictos
Proceso
Paso 1: Verificar estado actual
# Estado del repo y branch actual
git status
# Identificar branch actual
git branch --show-current
# Verificar si hay cambios sin commitear
git status --porcelain
IMPORTANTE: Si hay cambios sin commitear, preguntar al usuario:
- Queres hacer commit primero?
- Queres hacer stash?
- Queres descartar cambios?
Paso 2: Identificar branch principal
# Detectar si es main o master
git remote show origin | grep "HEAD branch" | cut -d: -f2 | tr -d ' '
Si falla, probar:
# Verificar cual existe
git branch -r | grep -E "origin/(main|master)$" | head -1 | sed 's/.*origin\///'
Paso 3: Fetch de cambios remotos
# Traer cambios sin aplicar
git fetch origin main # o master segun detectado
Paso 4: Analizar divergencia
# Commits en main que no estan en tu branch
git log HEAD..origin/main --oneline
# Commits en tu branch que no estan en main
git log origin/main..HEAD --oneline
# Ver cuanto divergieron
git rev-list --left-right --count origin/main...HEAD
El output de rev-list es: <commits_en_main> <commits_en_branch>
Interpretar:
- 0 0 = Sincronizados, no hay nada que hacer
- 5 0 = Main tiene 5 commits nuevos, tu branch esta atras
- 0 3 = Tu branch tiene 3 commits, main no tiene nuevos (solo push needed)
- 5 3 = Divergencia: main tiene 5 nuevos, tu branch tiene 3
Paso 5: Detectar conflictos potenciales
# Ver archivos modificados en main desde que divergieron
git diff --name-only HEAD...origin/main
# Ver archivos modificados en tu branch
git diff --name-only origin/main...HEAD
Comparar las listas. Si hay archivos en comun, hay riesgo de conflicto.
Para verificar conflictos sin mergear:
# Simulacion de merge (no aplica cambios)
git merge-tree $(git merge-base HEAD origin/main) HEAD origin/main
Si el output contiene <<<<<< o >>>>>>, habra conflictos.
Paso 6: Sugerir estrategia
Presentar al usuario:
Opcion A: Merge (recomendado para branches compartidos)
git merge origin/main
- Preserva historial completo
- Crea commit de merge
- Mas seguro para branches con colaboradores
Opcion B: Rebase (recomendado para branches personales)
git rebase origin/main
- Historial lineal
- Reescribe commits (requiere force push si ya pusheaste)
- Mejor para branches limpios antes de PR
Pregunta:
Estrategia recomendada: [merge/rebase] porque [razon].
Cual preferis? [merge/rebase]
Paso 7: Ejecutar sincronizacion
Si eligio MERGE:
git merge origin/main
Si eligio REBASE:
git rebase origin/main
Paso 8: Manejar conflictos (si ocurren)
Si hay conflictos, listarlos:
# Listar archivos con conflictos
git diff --name-only --diff-filter=U
Mostrar al usuario:
Hay conflictos en los siguientes archivos:
- src/components/Auth.tsx
- src/utils/helpers.ts
Opciones:
1. Resolver conflictos manualmente (te guio archivo por archivo)
2. Abortar merge: git merge --abort
3. Abortar rebase: git rebase --abort
Para cada archivo con conflicto:
# Mostrar las secciones en conflicto
git diff <archivo>
Paso 9: Verificar resultado
# Confirmar estado limpio
git status
# Verificar que estas sincronizado
git log --oneline -5
Soporte para Worktrees
Si el usuario trabaja con worktrees (patron .worktrees/):
Detectar si estamos en worktree
# Verificar si estamos en un worktree
git rev-parse --is-inside-work-tree
git worktree list
Consideraciones especiales para worktrees
- El main/master suele estar en el repo principal, no en el worktree
- Fetch desde el worktree funciona igual
- Rebase puede ser problematico si el worktree comparte objetos
Flujo para worktree:
# Desde el worktree
pwd # Verificar que estamos en .worktrees/<branch>
# Fetch funciona normal
git fetch origin main
# Merge/rebase normal
git merge origin/main
Ejemplos
Ejemplo 1: Sincronizar branch de feature
Usuario: "Necesito actualizar mi branch con main"
$ git status
On branch feature/auth
Your branch is up to date with 'origin/feature/auth'.
$ git fetch origin main
$ git rev-list --left-right --count origin/main...HEAD
3 5
# Interpretacion: main tiene 3 commits nuevos, tu branch tiene 5 commits propios
$ git diff --name-only HEAD...origin/main
src/config.ts
README.md
$ git diff --name-only origin/main...HEAD
src/components/Auth.tsx
src/hooks/useAuth.ts
tests/auth.test.ts
Respuesta:
Tu branch `feature/auth` tiene 5 commits propios y main tiene 3 commits nuevos.
Archivos modificados en main: src/config.ts, README.md
Archivos modificados en tu branch: 3 archivos en src/components, src/hooks, tests/
No hay archivos en comun, bajo riesgo de conflictos.
Estrategia recomendada: MERGE (tu branch ya fue pusheado)
Confirmas que haga merge de origin/main? [y/n]
Ejemplo 2: Detectar conflictos antes de mergear
Usuario: "Hay conflictos con main?"
$ git fetch origin main
$ git diff --name-only HEAD...origin/main
src/utils/api.ts
src/components/Header.tsx
$ git diff --name-only origin/main...HEAD
src/utils/api.ts
src/components/Auth.tsx
Respuesta:
Hay riesgo de conflicto en:
- src/utils/api.ts (modificado en ambos branches)
Archivos solo en main: src/components/Header.tsx
Archivos solo en tu branch: src/components/Auth.tsx
Te recomiendo hacer merge ahora para resolver el conflicto de api.ts antes de que crezca.
Queres que haga el merge? [y/n]
Ejemplo 3: Branch en worktree
Usuario: "Actualizar este worktree con main"
$ pwd
/Users/user/project/.worktrees/feature-login
$ git worktree list
/Users/user/project abc1234 [main]
/Users/user/project/.worktrees/feature-login def5678 [feature-login]
$ git fetch origin main
$ git merge origin/main
Already up to date.
Respuesta:
Estas trabajando en el worktree `feature-login`.
El worktree esta sincronizado con origin/main, no hay cambios nuevos que mergear.
Ejemplo 4: Resolver conflictos
Despues de merge con conflictos:
$ git merge origin/main
Auto-merging src/utils/api.ts
CONFLICT (content): Merge conflict in src/utils/api.ts
Automatic merge failed; fix conflicts and then commit the result.
$ git diff --name-only --diff-filter=U
src/utils/api.ts
Respuesta:
Hay conflicto en src/utils/api.ts.
Opciones:
1. Te muestro el conflicto para que lo resuelvas
2. Abortar merge (git merge --abort)
Que preferis? [1/2]
Si elige 1:
$ git diff src/utils/api.ts
Mostrar el diff y guiar la resolucion.
Comandos de referencia rapida
| Accion | Comando |
|---|---|
| Ver estado | git status |
| Fetch sin merge | git fetch origin main |
| Ver divergencia | git rev-list --left-right --count origin/main...HEAD |
| Commits pendientes de main | git log HEAD..origin/main --oneline |
| Merge main | git merge origin/main |
| Rebase sobre main | git rebase origin/main |
| Abortar merge | git merge --abort |
| Abortar rebase | git rebase --abort |
| Listar conflictos | git diff --name-only --diff-filter=U |
| Ver worktrees | git worktree list |
# Supported AI Coding Agents
This skill is compatible with the SKILL.md standard and works with all major AI coding agents:
Learn more about the SKILL.md standard and how to use these skills with your preferred AI coding agent.