Agent-almanac manage-git-branches
git clone https://github.com/pjt222/agent-almanac
T=$(mktemp -d) && git clone --depth=1 https://github.com/pjt222/agent-almanac "$T" && mkdir -p ~/.claude/skills && cp -r "$T/i18n/es/skills/manage-git-branches" ~/.claude/skills/pjt222-agent-almanac-manage-git-branches-5dbd61 && rm -rf "$T"
i18n/es/skills/manage-git-branches/SKILL.mdGestionar Ramas Git
Crea, cambia, sincroniza y limpia ramas siguiendo convenciones de nombres consistentes.
Cuándo Usar
- Al comenzar trabajo en una nueva funcionalidad o corrección de error
- Al cambiar entre tareas en distintas ramas
- Al mantener una rama de funcionalidad actualizada con main
- Al limpiar ramas después de fusionar pull requests
- Al listar e inspeccionar ramas
Entradas
- Requerido: Repositorio con al menos un commit
- Opcional: Convención de nombres de ramas (por defecto:
)tipo/descripcion - Opcional: Rama base para nuevas ramas (por defecto:
)main - Opcional: Nombre del remoto (por defecto:
)origin
Procedimiento
Paso 1: Crear una Rama de Funcionalidad
Usa una convención de nombres consistente:
| Prefijo | Propósito | Ejemplo |
|---|---|---|
| Nueva funcionalidad | |
| Corrección de error | |
| Documentación | |
| Reestructuración de código | |
| Mantenimiento | |
| Adición de pruebas | |
# Create and switch to a new branch from main git checkout -b feature/add-weighted-mean main # Or using the newer switch command git switch -c feature/add-weighted-mean main
Esperado: Se crea la nueva rama y se activa.
git branch muestra la nueva rama con un asterisco.
En caso de fallo: Si la rama base no existe localmente, primero haz fetch:
git fetch origin main && git checkout -b feature/name origin/main.
Paso 2: Rastrear Ramas Remotas
Configura el rastreo al subir una nueva rama por primera vez:
# Push and set upstream tracking git push -u origin feature/add-weighted-mean # Check tracking relationship git branch -vv
Para hacer checkout de una rama remota creada por otra persona:
git fetch origin git checkout feature/their-branch # Git auto-creates a local tracking branch
Esperado: La rama local rastrea la rama remota correspondiente.
git branch -vv muestra el upstream.
En caso de fallo: Si el rastreo automático falla, configúralo manualmente:
git branch --set-upstream-to=origin/feature/name feature/name.
Paso 3: Cambiar de Rama de Forma Segura
Antes de cambiar, asegúrate de que el árbol de trabajo esté limpio:
# Check for uncommitted changes git status
Si hay cambios, haz commit o guárdalos con stash:
# Option 1: Commit work in progress git add <files> git commit -m "wip: save progress on validation logic" # Option 2: Stash changes temporarily git stash push -m "validation work in progress" # Switch branches git checkout main # Later, restore stashed changes git checkout feature/add-weighted-mean git stash pop
Listar y gestionar el stash:
# List all stashes git stash list # Apply a specific stash (without removing it) git stash apply stash@{1} # Drop a stash git stash drop stash@{0}
Esperado: El cambio de rama tiene éxito. El árbol de trabajo refleja el estado de la rama destino. Los cambios guardados con stash son recuperables.
En caso de fallo: Si el cambio está bloqueado por cambios sin commit que serían sobreescritos, primero usa stash o haz commit.
git stash no puede guardar archivos no rastreados a menos que uses git stash push -u.
Paso 4: Sincronizar con el Upstream
Mantén tu rama de funcionalidad actualizada con la rama base:
# Fetch latest changes git fetch origin # Rebase onto latest main (preferred — keeps linear history) git rebase origin/main # Or merge main into your branch (creates merge commit) git merge origin/main
Esperado: La rama incluye los últimos cambios de main. Sin conflictos, o conflictos resueltos (ver
resolve-git-conflicts).
En caso de fallo: Si el rebase genera conflictos, resuelve cada uno y ejecuta
git rebase --continue. Si los conflictos son demasiado complejos, aborta con git rebase --abort e intenta git merge origin/main en su lugar.
Paso 5: Limpiar Ramas Fusionadas
Después de que los pull requests sean fusionados, elimina las ramas obsoletas:
# Delete a local branch that has been merged git branch -d feature/add-weighted-mean # Delete a local branch (force, even if not merged) git branch -D feature/abandoned-experiment # Delete a remote branch git push origin --delete feature/add-weighted-mean # Prune remote-tracking references for deleted remote branches git fetch --prune
Esperado: Las ramas fusionadas se eliminan local y remotamente.
git branch muestra solo las ramas activas.
En caso de fallo:
git branch -d se niega a eliminar ramas no fusionadas. Si la rama fue fusionada mediante squash merge en GitHub, Git puede no reconocerla como fusionada. Usa git branch -D si tienes la certeza de que el trabajo está preservado.
Paso 6: Listar e Inspeccionar Ramas
# List local branches git branch # List all branches (local and remote) git branch -a # List branches with last commit info git branch -v # List branches merged into main git branch --merged main # List branches NOT yet merged git branch --no-merged main # See which remote branch each local branch tracks git branch -vv
Esperado: Vista clara de todas las ramas, su estado y las relaciones de rastreo.
En caso de fallo: Si las ramas remotas aparecen desactualizadas, ejecuta
git fetch --prune para limpiar las referencias a ramas remotas eliminadas.
Validación
- Los nombres de las ramas siguen la convención acordada
- Las ramas de funcionalidad se crean desde la rama base correcta
- Las ramas locales rastrean sus contrapartes remotas
- Las ramas fusionadas están limpias (local y remotamente)
- El árbol de trabajo está limpio antes de cambiar de rama
- Los cambios guardados con stash no quedan huérfanos
Errores Comunes
- Trabajar directamente en main: Crea siempre una rama de funcionalidad. Hacer commit directamente en main dificulta la creación de PRs y la colaboración.
- Olvidar hacer fetch antes de crear una rama: Crear una rama desde un main local desactualizado significa empezar atrasado. Siempre ejecuta
primero.git fetch origin - Ramas de larga duración: Las ramas de funcionalidad que viven semanas acumulan conflictos de fusión. Sincroniza con frecuencia y mantén las ramas de corta duración.
- Stashes huérfanos:
es almacenamiento temporal. No dependas de él para trabajo a largo plazo. Haz commit o crea una rama en su lugar.git stash - Eliminar trabajo no fusionado:
es destructivo. Verifica congit branch -D
antes de forzar la eliminación.git log branch-name - No hacer prune: Las ramas remotas eliminadas en GitHub siguen apareciendo localmente hasta que ejecutas
.git fetch --prune
Habilidades Relacionadas
- hacer commit del trabajo en las ramascommit-changes
- abrir PRs desde ramas de funcionalidadcreate-pull-request
- resolver conflictos durante la sincronizaciónresolve-git-conflicts
- configuración del repositorio y estrategia de ramasconfigure-git-repository