La diferencia de Git Worktree
Según Fernando Fernández, Programador Líder en Pigmalion Software, Git worktree marca la diferencia porque permite trabajar en varias ramas de un mismo proyecto al mismo tiempo, sin enredos ni duplicaciones. Esto significa más agilidad: podés avanzar en una nueva funcionalidad, revisar un cambio pendiente o corregir un error urgente sin frenar lo que ya estabas haciendo. En pocas palabras, te da libertad para moverte en paralelo y mantener todo tu trabajo ordenado y simple.

Fernando Fernández, Desarrollador Líder en Pigmalion Software
El problema de cambiar de rama
En nuestra labor como desarrolladores es común tener que encarar más de una tarea a la vez, ya sea porque se descubre una falla que hay que solucionar lo antes posible, porque el cliente considera que algo tiene más prioridad dentro del sprint, o porque tenemos que probar lo realizado por otro miembro del equipo.
Cuando esto sucede, tenemos que dejar lo que estamos haciendo en una rama de git para cambiar a otra rama; lo que implica la posibilidad de perder nuestro trabajo si no tomamos el recaudo de guardarlo previamente. Para evitar esto, podemos guardarlo en un commit indicando que está en desarrollo; crear un parche o guardarlos con git stash. Ninguna de estas soluciones es segura ni cómoda.
¿Qué aporta Git Worktree?
Para estos casos, git posee un comando que nos permite trabajar con varios worktrees al mismo tiempo en el un solo repositorio. Es decir, que podemos tener varios directorios con sus respectivos worktrees y HEADs, lo que nos permite trabajar con ramas distintas concurrentemente. Podemos tener abiertos dos worktree del mismo repositorio en un IDE.
Esto resulta especialmente útil en proyectos grandes, donde la sincronización de ramas y la revisión de código son tareas frecuentes. Worktree permite mantener entornos aislados y confiables, lo que reduce errores al cambiar de contexto.
¿Cómo crear un worktree?
Para crear un worktree usamos el comando:
git worktree add RUTA RAMA
Es importante tener en cuenta que RUTA debe estar fuera de un repositorio git. Lo más común es que los worktree convivan en un directorio separado del repositorio.
Si el repositorio se encuentra en:
/home/usuario/git/proyecto
Los worktrees irían en:
/home/usuario/git/proyecto.worktrees
Por ejemplo:
git worktree add ../proyecto.worktrees/otra-rama otra-rama
Crear una nueva rama con worktree
Si la rama no existe la podemos crear agregando el parámetro -b antes del nombre de la rama:
git worktree add ../proyecto.worktrees/nueva-feature -b nueva-feature
La rama creada está basada en el branch actual. Es posible indicar la rama en la que se va a basar la nueva rama:
git worktree add ../proyecto.worktrees/nueva-feature -b nueva-feature rama-base
Otros comandos útiles
- Listar los worktrees creados:
git worktree list
- Eliminar un worktree:
git worktree remove
Automatizar tareas con hooks
Lo habitual es que en nuestro repositorio tengamos archivos de configuración o tengamos que instalar dependencias. Por defecto, cuando creamos un worktree tenemos que copiar los archivos de configuración o instalar las dependencias a mano.
Es posible crear un hook de git para que lo haga automáticamente. Tenemos que crear el archivo .git/hooks/post-checkout.
Ejemplo:
#!/bin/bash
if [[ "$1" == "0000000000000000000000000000000000000000" ]]; then
BASE_DIR="$(cat .git | cut -d " " -f 2 | rev | cut -d '/' -f 4- | rev)"
FILES_TO_COPY=()
for FILE in "${FILES_TO_COPY[@]}"; do
cp "$BASE_DIR/$FILE" "$(pwd)/$FILE"
done
# Acá se pueden agregar comandos para ejecutar en el worktree. Por ejemplo para instalar dependencias
fi
Automatizar la instalación de dependencias con hooks es una práctica recomendada en equipos grandes. Garantiza que cada rama tenga siempre el entorno correcto, evitando inconsistencias entre worktrees.
Extensiones para IDEs
Existen plugins o extensiones para integrar los worktree dentro de los IDE:
- Git Worktree Manager para Visual Studio Code.
- Git_worktree_manage para IntelliJ IDEA.
También existen scripts de terceros y gestores visuales que simplifican la creación y eliminación de worktrees, pensados para equipos que usan Git en entornos corporativos.
Esta funcionalidad de git es poco conocida pero es muy útil. Espero que la puedan integrar en su flujo de trabajo para mejorarlo.
