Estamos a medias con un cambio y aparece un error que hay que corregir en otra rama. Si cambiamos de rama en la misma carpeta, Git puede pedirnos que guardemos o apartemos lo que teníamos sin terminar. Con git worktree podemos abrir una segunda carpeta del mismo repositorio y dejar la primera tal como está.
Crear una segunda carpeta de trabajo
Nos situamos en la carpeta del proyecto y comprobamos en qué rama estamos. En este ejemplo la carpeta se llama proyecto y la nueva quedará al lado, como proyecto-arreglo:
git status
git branch --show-current
git worktree add -b arreglo-urgente ../proyecto-arreglo HEAD
La opción -b crea la rama arreglo-urgente; ../proyecto-arreglo es la carpeta nueva y HEAD indica que parte del último commit de la rama actual. Si el arreglo debe partir de main y estamos en otra rama, cambiamos HEAD por main. Conviene comprobarlo antes: los cambios que aún no hemos guardado en un commit no aparecen por arte de magia en la carpeta nueva.
Entramos en ella y trabajamos con normalidad. También podemos lanzar comandos desde la carpeta original con git -C:
git -C ../proyecto-arreglo status
git -C ../proyecto-arreglo branch --show-current
git worktree list
git worktree list muestra las dos rutas y la rama activa en cada una. Podemos tener el editor abierto en ambas, pero cada carpeta tiene sus propios archivos de trabajo y su propio índice de Git. La historia y las ramas pertenecen al mismo repositorio: un commit hecho en arreglo-urgente queda disponible desde la carpeta original, aunque no modifica por sí solo los archivos que allí tenemos abiertos.
Qué comparte y qué no comparte
Esto no equivale a clonar el proyecto otra vez. Git comparte sus objetos y referencias, mientras cada worktree conserva su copia de los archivos y su rama activa. Por eso no nos dejará tener normalmente la misma rama abierta en las dos carpetas: evita que editemos la misma rama desde dos sitios sin darnos cuenta.

Lo que no está versionado tampoco se duplica automáticamente. Si el proyecto necesita un .env, dependencias instaladas o una base de datos local, habrá que prepararlos en la segunda carpeta según el proyecto. Y una segunda carpeta no aísla servicios: si ambas aplicaciones apuntan a la misma base de datos o intentan escuchar en el mismo puerto, pueden molestarse entre sí.
Volver a una sola carpeta
Cuando terminemos el arreglo, guardamos los cambios en un commit y lo incorporamos a la rama que corresponda con el flujo habitual del proyecto. Después revisamos que no quede nada sin guardar en proyecto-arreglo y retiramos sólo ese worktree:
git -C ../proyecto-arreglo status
git worktree remove ../proyecto-arreglo
git worktree list
El comando remove se niega a borrar una carpeta con cambios pendientes; no añadimos --force para quitarnos el aviso. Retirar el worktree tampoco borra la rama. Si queremos eliminarla, primero verificamos que el cambio se haya integrado y luego decidimos si procede hacerlo.
La documentación de Git recoge más opciones, como abrir una rama que ya existe o mover un worktree. Para una interrupción puntual, con add, list y remove suele bastar. Y si estamos empezando con Git, antes podemos ver cómo subir nuestro primer proyecto a GitHub.
Si os ha salvado de apartar un cambio a medias, contadnos en qué proyecto lo habéis usado.
