En más de una ocasión he tenido la necesidad de recuperar un (o varios) archivo desde una branch diferente a la que estoy trabajando y una y otra vez debo realizar una búsqueda ya que siempre olvido el comando requerido.
Por suerte para tod@s git
ofrece soluciones para casi todos los problemas que puedas imaginar (relacionados con archivos y versiones). En este artículo veremos algunas formas de solucionar este problema.
¿Cómo obtengo un archivo desde otro branch?
Primero definamos una situación en donde este problema aparezca:
Estás trabajando en un branch llamada migration
, en este branch tienes un archivo llamado src/migration-tools/
.
sponsor
Tu producto o servicio podría estar aquí
En otro branch, llamémosle features
se ha realizado otro trabajo pero no ha sido sincronizado con los cambios que están en migration
.
Ahora, te tocó trabajar en el branch features
, así que creas un nuevo branch desde ahí y te das cuenta que necesitas algunas de las herramientas de migration-tools
.
¿Qué haces?.
¿Abres el repositorio en el browser y copias y pegas el script que necesitas?
¿Comienzas a crear pull-requests y hacer merge de los diferentes branch para poder tener acceso a esos archivos?
En mi opinión ninguna de las anteriores, la solución es: “Traer el directorio completo hacia tu branch”.
Aquí hay 3 posibles formas de resolverlo.
Git checkout
El comando git checkout
te permite de una forma sencilla obtener un archivo o directorio desde otro branch, tan solo debes seguir esta sintaxis para ejecutarlo.
$ git checkout <el-otro-branch> -- path/a/tu/archivo
Para resolver el caso de uso lo que harías será:
$ git checkout features
$ git checkout -b features-work-in-progress
$ git checkout migration -- src/migration-tools
Esto es, primero asegurarte que estás en el branch adecuado, luego crear un branch para trabajar features-work-in-progress
y luego obtener la copia del directorio.
Git restore y git switch
Quizá no estés del todo al tanto con git switch
, esto por que es un comando relativamente nuevo añadido a git.
git restore
restaura tu “espacio de trabajo” eliminando los cambios que no han sido “commiteados” (a falta de mejor traducción).git switch
te permite cambiar branches.
¿Como funcionan en conjunto para lograr obtener un archivo o directorio desde otra branch?
Primero, debes cambiar al branch en donde quieres trabajar y “agregar” el nuevo archivo o directorio
git switch features-work-in-progress
Luego obtienes el directorio desde la otra branch
git restore --source migration -- src/migration-tools
Finalmente guarda tus cambios commit
y actualiza tu repositorio push
.
Git show
sponsor
Tu producto o servicio podría estar aquí
Una última opción es utilizar git show
. Este comando te permite “ver” diferentes tipos de objetos dentro del repositorio.
El proceso sería como sigue:
Cambia a el branch donde trabajarás
git switch features-work-in-progress
Luego obtienes el directorio desde la otra branch
git show migration:./src/migration-tools > ./src/migration-tools
Listo, ya puedes hacer push
a tu branch.
En definitiva git es una herramienta que ofrece muchas opciones para resolver problems que te encuentras durante la “administración” de tu código, como este problema de obtener un archivo o directorio desde otro branch con el que me encuentro comúnmente.
😃 Thanks for reading!
Did you like the content? Found more content like this by joining to the Newsletter or following me on Twitter