git

Trabaja en dos (o más) ramas de git al mismo tiempo

Los árboles de trabajo (worktree) permiten tener varios directorios apuntando a ramas diferentes

Estos días nos surgió la necesidad de revisar más de una rama de git del mismo proyecto a la vez. De entrada esto no es posible ya que al cambiar de rama con git checkout rama el contenido del proyecto cambia. Así que, ¿como tener dos ramas abiertas al mismo tiempo? Para eso tenemos el comando  git worktree, el cual nos permite administrar árboles de trabajo múltiples.

Lo primero que debes saber es que un repositorio tiene un árbol de trabajo principal y cero o más árboles de trabajo vinculados. Así que nuestro directorio de trabajo preparado por git init o git clone se denomina árbol de trabajo principal, y un árbol de trabajo vinculado se agrega con el comando git worktree add, su sintaxis es:

$ git worktree add ../nuevo-directorio-trabajo-vinculado alguna-rama-existente

Por ejemplo, si clonamos el repositorio de EDgrid en nuestro directorio ~/EDteam, nuestro directorio de trabajo principal será ~/EDteam/EDgrid, suponiendo que creamos la rama feature/buttonnav, y en ella agregamos nuevos commits al proyecto, esta rama se encontrará varios commits por encima de la rama master.

Si queremos revisar estas dos ramas a la vez, usaremos el siguiente comando:

$ git worktree add ../my-repo-vinculado master 

Lo que generará un nuevo directorio ubicado en ~/EDteam/my-repo-vinculado pocisionado en la rama master de nuestro repositorio, ahora lo único que debemos hacer es abrir en nuestro IDE los directorios ~/EDteam/EDgrid y ~/EDteam/my-repo-vinculado, los cuales se encuentran pocisionados en las ramas feature/buttonnav y master respectivamente.

Para listar nuestros árboles de trabajo usamos el comando git worktree list

$ git worktree list

/home/alejandro/EDteam/EDgrid             72ccdc8 [feature/buttonnav]
/home/alejandro/EDteam/my-repo-vinculado  72ccdc8 [master]

Cuando ya no requieras hacer uso de un árbol de trabajo vinculado, elimina la carpeta contenedora y luego usa el comando git worktree prune.

$ rm -rf ../my-repo-vinculado 
$ git worktree prune

Si quieres saber más de Git, puedes tomar nuestro curso Git Desde Cero.