DEV Community

Cover image for Git worktrees con GitKraken: atiende un hotfix sin perder tu contexto
Jesus Manuel Garcia Torres
Jesus Manuel Garcia Torres

Posted on

Git worktrees con GitKraken: atiende un hotfix sin perder tu contexto

Estás a mitad de una funcionalidad y llega el mensaje: “Necesitamos corregir esto cuanto antes”.

Tienes archivos modificados, ideas a medias y una rama que todavía no está lista. Necesitas atender la urgencia sin desacomodar lo que estabas haciendo.

Aquí es donde Git worktrees resulta útil: puedes abrir otra rama del mismo repositorio en una carpeta diferente y trabajar en ambas sin cambiar continuamente de rama en un único directorio.

Esta guía forma parte de mi serie sobre Git y GitKraken para la comunidad de habla hispana.

En el primer artículo practicamos ramas, staging y commits. Ahora vamos a usar esos conceptos para resolver una interrupción cotidiana.

¿Qué es un worktree?

Un worktree es un directorio de trabajo vinculado a tu repositorio.

Cada worktree tiene sus propios archivos, área de staging y HEAD, que identifica el commit o la rama en la que estás trabajando. Los worktrees comparten los objetos de Git y las referencias de las ramas.

Puedes organizarte así:

carpeta-de-practicas/
├── taller-git-worktrees/   → feature/nuevo-menu
└── taller-git-hotfix/      → hotfix/contacto
Enter fullscreen mode Exit fullscreen mode

Compartir repositorio no significa que los cambios se integren automáticamente entre ramas. Un commit creado en el hotfix estará disponible en el historial compartido, pero la otra rama conservará su versión de los archivos hasta que incorpores ese cambio.

Puedes consultar este modelo en la documentación oficial de Git worktree.

Qué vamos a conseguir

Al terminar tendrás:

  • Una funcionalidad con trabajo pendiente en su propia carpeta.
  • Una corrección guardada en otra rama.
  • La comprobación de que atender el hotfix no modificó el trabajo pendiente.
  • Un procedimiento para retirar el worktree cuando termines.

No necesitas instalar dependencias ni levantar una aplicación.

Antes de empezar

Necesitas Git, un editor y GitKraken Desktop con soporte para worktrees, disponible desde la versión 10.5 según su documentación oficial.

Los comandos están preparados para Bash, Zsh o Git Bash en Windows. Usa una carpeta nueva, fuera de tus proyectos habituales.

Combinaremos la terminal para preparar el laboratorio con GitKraken para revisar los cambios y crear el commit de la corrección.

1. Prepara una funcionalidad a medias

Ejecuta:

mkdir taller-git-worktrees
cd taller-git-worktrees

git init -b main
git config user.name "Demo Git"
git config user.email "demo@example.com"

printf 'Contacto: soporte pendiente\n' > contacto.txt

git add contacto.txt
git commit -m "chore: crear portal de ejemplo"

git switch -c feature/nuevo-menu
printf 'Menú en construcción\n' > menu.txt
Enter fullscreen mode Exit fullscreen mode

La identidad de ejemplo queda configurada únicamente para este repositorio.

Ahora tienes una rama llamada feature/nuevo-menu y un archivo menu.txt sin commit. Este archivo representa la funcionalidad que estabas desarrollando cuando llegó la urgencia.

Abre la carpeta taller-git-worktrees en GitKraken. Comprueba que la rama activa sea feature/nuevo-menu y que aparezca el archivo pendiente.

También puedes verificarlo en la terminal:

git status --short
Enter fullscreen mode Exit fullscreen mode

El resultado debe incluir:

?? menu.txt
Enter fullscreen mode Exit fullscreen mode

Los signos ?? indican que Git todavía no está siguiendo ese archivo.

2. Crea un worktree para el hotfix

La urgencia consiste en corregir el contacto de soporte. Queremos partir de main, sin incluir la funcionalidad incompleta.

Desde la misma terminal, ejecuta:

git worktree add -b hotfix/contacto ../taller-git-hotfix main
git worktree list
Enter fullscreen mode Exit fullscreen mode

El primer comando hace tres cosas:

  1. Crea la rama hotfix/contacto.
  2. Usa main como punto de partida.
  3. Prepara los archivos de esa rama en ../taller-git-hotfix.

El segundo comando muestra las carpetas vinculadas y la rama activa en cada una.

Tu archivo menu.txt sigue pendiente en la carpeta original. No necesitamos guardarlo en un commit ni retirarlo para comenzar la corrección.

¿También se puede crear desde GitKraken?

Sí. Para hacerlo visualmente, prepara una rama que no esté activa en otro worktree, haz clic derecho sobre ella y selecciona Create worktree.

En este laboratorio ya lo creamos desde la terminal. Ahora solo ábrelo desde el panel izquierdo de GitKraken, usando Open this worktree o Open worktree in a new tab. El procedimiento visual está documentado aquí.

3. Corrige desde la carpeta del hotfix

En la terminal, entra al nuevo directorio y comprueba la rama:

cd ../taller-git-hotfix
git branch --show-current
Enter fullscreen mode Exit fullscreen mode

El resultado debe ser:

hotfix/contacto
Enter fullscreen mode Exit fullscreen mode

Actualiza el archivo y revisa la diferencia:

printf 'Contacto: soporte@example.com\n' > contacto.txt
git diff
Enter fullscreen mode Exit fullscreen mode

El cambio esperado es:

-Contacto: soporte pendiente
+Contacto: soporte@example.com
Enter fullscreen mode Exit fullscreen mode

En GitKraken:

  1. Abre el worktree del hotfix.
  2. Confirma que estás en hotfix/contacto.
  3. Revisa el diff de contacto.txt.
  4. Pasa únicamente ese archivo a staging.
  5. Crea el commit con este mensaje:
fix: corregir contacto de soporte
Enter fullscreen mode Exit fullscreen mode

El correo utilizado es ficticio.

4. Regresa y comprueba que conservaste tu contexto

Vuelve al directorio original:

cd ../taller-git-worktrees

git status --short
cat menu.txt
cat contacto.txt
Enter fullscreen mode Exit fullscreen mode

Debes encontrar:

  • menu.txt todavía sin commit.
  • El texto Menú en construcción intacto.
  • El contacto original: Contacto: soporte pendiente.

Este último punto es importante: la corrección quedó guardada en hotfix/contacto, pero todavía no está integrada en feature/nuevo-menu.

Los worktrees nos permitieron trabajar en dos contextos independientes. La integración entre ramas sigue siendo una decisión explícita.

5. Termina el laboratorio y retira el worktree

Para cerrar la práctica, guardaremos el borrador del menú en su rama:

git add menu.txt
git commit -m "feat: agregar borrador del menú"
Enter fullscreen mode Exit fullscreen mode

Ahora integra la corrección en main:

git switch main
git merge --ff-only hotfix/contacto
Enter fullscreen mode Exit fullscreen mode

En este laboratorio main no recibió otros commits, así que puede avanzar directamente hasta el commit del hotfix.

Antes de retirar la carpeta, comprueba que no tenga cambios pendientes:

git -C ../taller-git-hotfix status --short
Enter fullscreen mode Exit fullscreen mode

Si no muestra nada, puedes continuar:

git worktree remove ../taller-git-hotfix
git branch -d hotfix/contacto
git worktree list
Enter fullscreen mode Exit fullscreen mode

git worktree remove retira el directorio de trabajo vinculado. La eliminación de la rama es una operación separada, que hacemos después de integrarla.

Al terminar:

  • main contiene el contacto corregido.
  • feature/nuevo-menu conserva el commit del menú.
  • La carpeta temporal del hotfix ya no es necesaria.

En un repositorio compartido, publica la rama y sigue el proceso de pull request, revisión y validación del equipo antes de dar por integrada la corrección.

Lo que debes considerar en una aplicación real

Un worktree separa los archivos de trabajo, pero no configura automáticamente un entorno completo e independiente.

Si ejecutas dos versiones de tu aplicación, revisa:

  • Dependencias: cada carpeta puede necesitar su propia instalación.
  • Variables locales: los archivos ignorados, como .env, no se copian automáticamente desde la otra carpeta.
  • Puertos: dos servidores no pueden escuchar simultáneamente en la misma dirección y puerto.
  • Bases de datos y servicios: ambas instancias podrían conectarse al mismo recurso externo.

Además, Git normalmente impide activar una misma rama en dos worktrees. Utiliza una rama distinta por tarea.

¿Cuándo conviene usar este flujo?

Es especialmente útil cuando necesitas mantener dos contextos disponibles durante un tiempo: atender un hotfix, revisar otra rama o comparar implementaciones.

Para una pausa breve, git stash también puede ser suficiente. La ventaja del worktree aparece cuando quieres conservar las carpetas abiertas y moverte entre ellas sin reemplazar continuamente sus archivos.

GitKraken te permite seguir visualmente qué rama estás revisando y qué cambios estás guardando. El hábito sigue siendo el mismo: confirma carpeta, rama y diff antes de cada commit.

Reto para practicar

Desde main, crea otra rama con su propio worktree para escribir documentación.

Agrega un archivo sin hacer commit y comprueba que:

  1. Aparece como pendiente en el nuevo worktree.
  2. No aparece en el directorio original.
  3. Puedes identificar ambas carpetas con git worktree list.

Después guarda el cambio y decide si quieres integrarlo o conservarlo en su rama antes de retirar el worktree.

¿Para qué usarías primero este flujo: atender un hotfix, revisar un pull request o probar una idea?

Top comments (0)