Si necesitas revisar una rama mientras tienes cambios pendientes en otra, git worktree permite mantener ambas en carpetas separadas. También sirve para asignar una carpeta y una rama a cada agente que trabaja en el proyecto.
Una rama identifica una línea de desarrollo; el directorio de trabajo contiene los archivos que estás editando. Crear una rama no crea otra carpeta: al cambiar de rama en el directorio habitual, Git actualiza sus archivos. Pro Git explica cómo se relacionan ramas y commits.
Con git worktree puedes crear directorios de trabajo adicionales sin clonar de nuevo el repositorio.
Crear un worktree por tarea
Los worktrees enlazados comparten el repositorio, pero tienen sus propios archivos de trabajo, HEAD e índice. Por defecto, Git impide usar simultáneamente la misma rama en dos worktrees. Manual de git worktree.
Prueba este ejemplo en una carpeta nueva, con Git instalado y una terminal compatible con los comandos siguientes:
mkdir worktree-demo
cd worktree-demo
git init -b main
git -c user.name=Demo -c user.email=demo@example.invalid commit --allow-empty -m "Inicio"
git worktree add -b tarea/documentacion ../worktree-docs main
git worktree add -b tarea/interfaz ../worktree-ui main
git worktree list
Los nombres de ramas y carpetas son de ejemplo. La salida de git worktree list debe mostrar tres directorios: el principal y los dos nuevos.
Comprobar archivos separados
Desde la carpeta worktree-demo, crea un archivo solo en el worktree de documentación:
printf 'Borrador de documentación\n' > ../worktree-docs/nota.md
git -C ../worktree-docs status --short
git -C ../worktree-ui status --short
El primer comando debe mostrar ?? nota.md, que indica un archivo nuevo sin seguimiento. El segundo no debe mostrar cambios. Así compruebas que el archivo se ha creado únicamente en el worktree de documentación. Documentación de git status.
Antes de editar o asignar una tarea a un agente, comprueba la carpeta y la rama. Por ejemplo: «Trabaja en worktree-docs, rama tarea/documentacion, y limita los cambios a la documentación».
Puertos y datos compartidos
Cada worktree tiene sus propios archivos, pero puede compartir servicios con los demás. Si dos servidores intentan escuchar en el mismo puerto, tendrás que asignarles puertos distintos. Si ambos usan la misma base de datos de desarrollo, una migración puede afectar al otro proceso.
Prepara también las dependencias y la configuración local de cada worktree. Puede ser necesario instalar paquetes, crear archivos de configuración o asignar una base de datos de desarrollo. Documenta esos pasos en el proyecto.
Si trabajas con agentes, asigna tareas que puedan revisarse por separado. Uno puede editar una pantalla y otro ampliar la documentación. Si ambos cambian la misma interfaz entre componentes, coordina los cambios aunque utilicen worktrees distintos.
Revisar e integrar cambios
Guarda nota.md en un commit y revisa los cambios desde la carpeta principal:
git -C ../worktree-docs add nota.md
git -C ../worktree-docs -c user.name=Demo -c user.email=demo@example.invalid commit -m "Añade nota"
git diff main...tarea/documentacion
La comparación con tres puntos muestra los cambios desde el ancestro común hasta la rama indicada. Es una forma de revisar qué aporta la tarea antes de integrarla. En este ejemplo solo debería aparecer nota.md. Documentación de git diff.
Después puedes integrar desde main:
git merge --ff-only tarea/documentacion
--ff-only permite integrar la rama solo si main puede avanzar hasta su último commit sin crear un commit de fusión. Si falla, revisa cómo combinar las ramas y resuelve los posibles conflictos. Después de integrar cualquier cambio, ejecuta las comprobaciones del proyecto. Documentación de git merge.
Eliminar worktrees terminados
Una vez integrado el trabajo y revisado que no queda nada pendiente:
git worktree remove ../worktree-docs
git worktree remove ../worktree-ui
git worktree list
remove rechaza normalmente carpetas con cambios o archivos sin seguimiento. Si ocurre, revisa su contenido antes de continuar. Eliminar el worktree no borra su rama; puedes conservarla o gestionarla por separado. Manual de git worktree.
Asigna una tarea a cada worktree, revisa sus cambios antes de integrarlos y elimina la carpeta cuando termines. Mantén documentados los puertos y los datos que comparte con otros entornos de trabajo.
