El problema que resuelven los worktrees
Estás profundo en un branch feature cuando aterriza un reporte de bug urgente. Los worktrees te permiten hacer checkout de múltiples branches simultáneamente, en diferentes directorios, compartiendo el mismo .git.
Añadir un worktree
git worktree add ../hotfix-1234 hotfix/login-redirect
git worktree add -b hotfix/login-redirect ../hotfix-1234 main
Listar y gestionar
git worktree list
git worktree remove ../hotfix-1234
git worktree prune
Cómo funciona internamente
El .git en tu directorio original es el repo real. Cada worktree adicional tiene un archivo .git apuntando a main-repo/.git/worktrees/<name>.
Workflows concretos
Hotfix sin perturbar tu trabajo
git worktree add ../hotfix main
cd ../hotfix
git checkout -b hotfix/cve-fix
cd -
git worktree remove ../hotfix
Comparación de larga duración
git worktree add ../old v2.4.0
diff -ru ../old/src ./src
Revisar el PR de un colega localmente
gh pr checkout 123 --branch pr-123
git worktree add ../pr-123 pr-123
cd ../pr-123
npm test
CI y worktrees
git worktree add ./build-linux $SHA
git worktree add ./build-windows $SHA
Limitaciones
- No puedes hacer checkout del mismo branch en dos worktrees.
- Algunos hooks pueden comportarse mal.
- Los submódulos en worktrees pueden tener comportamiento sorprendente.
Alias que ayudan
[alias]
wt = worktree
wtl = worktree list
wta = worktree add
wtr = worktree remove