25. git switch

Un episodio de Tutorial de Git

Con git switch podemos cambiar de rama. Un poco como con git checkout, pero sin usar git checkout.

Transcripción

[Música]

Hola a todas, hola a todos, qué tal como estáis y bienvenidos un día más a makigas, al siguiente capítulo del tutorial de Git. A veces me cuesta pronunciar esta frase, no estoy acostumbrado.

Hoy voy a hablar de un comando nuevo que apareció hace un par de versiones de Git. La versión 2.23 o 2.24, que no sé de cuándo es. No es tan vieja como parece, por lo que es posible que si estás utilizando una versión vieja de Git no puedas entender este vídeo. He comprobado que en Debian no me funciona correctamente, porque la función de Debian es bastante vieja. Podéis saber qué versión de Git estáis usando si ponéis git --version. En mi caso, yo trabajo con la última pero si estáis usando una versión anterior a la 2.23 o 2.24, puede que no podáis hacer bien lo que voy a contar en este vídeo y que os dé problemas. Si estáis usando Debian 10, pues... me apiado de vosotros y a la vez tenéis lo que merecéis por no usar una distro seria como por ejemplo Fedora--

Sea como sea, voy a hablar del comando switch. Un comando que apareció por esta versión, la 2.23 o 2.24, para cambiar fácilmente entre ramas. Y dirás, "¿Dani, cómo que cambiar fácilmente entre ramas si siempre ha sido muy sencillo cambiar entre ramas?" Bueno, vamos a evaluarlo. Vamos a mirarlo despacio y ver si realmente es sencillo o no.

Yo he clonado un repo en este ordenador que es Bootsrap. Porque sí, vale, porque he elegido este y podría haber elegido cualquier otro. Como está recién clonado, solamente tengo acceso a la rama main, que es lo que sale cuando listo mis ramas con git branch. Pero Bootstrap, en su página web, tiene bastantes más ramas aparte de la main.Tiene ramas que están a medias, y tal. Artefactos históricos de código que a lo mejor dices "ay, ya lo revisaré" y luego nunca se revisa. Esto pasa, y cualquiera que haya trabajado con Git me dará la razón en que muchas veces te quedan ahí ramas que te olvidas de ellas porque la vida va muy deprisa.

Pero bueno, yo las puedo ver en mi ordenador si ejecuto git branch -a. Con el -a le digo "oye, pero enséñamelo todo: todos los refs que hayan, incluidos los remotos". Con esto me muestra que hay ramas remotas que apuntan a más sitios. Puedo cambiar de rama para meterme en una de esas.

Por ejemplo, voy a elegir alguna como puede ser... js-docs-tweaks. Me parece bien. O jo-docs-thanks-page, que como da las gracias me parece más bonita. Haría "git checkout jo-docs-change-page" y con eso cambio de rama. Me dice "se ha creado una nueva rama que ahora apunta a la rama remota. Cambiada rama".

Eso está bien, pero checkout vale para más cosas: como borrar modificaciones. Cuando haces un cambio en un archivo y tienes el working directory sucio,y dices "ay, no quería hacer eso". ¿Qué comando usas para volver atrás? Puedes usar "git checkout --" para deshacer esas modificaciones. Esto es contenido primitivo. Pero claro, git checkout te hace dos cosas. Te sirve para volver atrás en el tiempo y te sirve para cambiar de rama.

Lo piensas y dices... a ver, si lo piensas con mente cósmica tiene sentido. git checkout sirve para traerte un working directory. El working directory de esta rama, o el working directory del archivo README.md para deshacer cambios.

Pero esto a una persona nueva no se lo puedes contar, porque le dices working directory y te dice ¿de qué me estás hablando tú? Entonces, en una versión de Git relativamente reciente, como digo, apareció el comando switch. Ahí tenéis su nomenclatura: git switch. Que sirve para hacer lo mismo: para cambiar de rama. Le dices git switch y el nombre de la rama y te hace el cambio de rama. Por ejemplo, git switch a main. Y con esto vuelves a main. git switch jo-docs-thanks-page, y con eso me voy a la rama jo-docs-thanks-page.

Vamos a ver qué más podemos elegir... una rama cortita. Por ejemplo, "playground", que tiene un nombre así corto. git switch playground. Y ya estoy en la rama playground.

Muy bien, pues para eso sirve. ¿Sólo para eso? No hombre no, también tiene más cositas. Si ejecuto git switch --help, puedo ver todo lo que hace... igual si estáis en otro sistema operativo como Windows no obtenéis una salida como esta, pero bueno... en particular una opción bastante interesante es la opción -c, que sirve para crear ramas. Es un poco como el equivalente a cuando en git hacías git branch holamundo para crear una rama. Te creaba la rama y la tenías por ahí. Luego podías hacer git checkout holamundo para cambiar de rama.

Dirás, pero nadie hace eso y usa git branch. Todo el mundo hace git checkout -b. Y es cierto. Bueno, pues igual que tienes el git checkout -b, tienes el git switch -c para decir "oye, llévame a esta rama nueva creada a partir de donde estoy ahora mismo". Por ejemplo, "probando". Esto crea una rama llamada probando que parte de holamundo2. Es decir, que git switch -c y git checkout -b hace lo mismo. La diferencia es que git checkout hace más cosas: es como la Termomix de los comandos de Git, pero git switch te hace una cosa y ya está.

Existen más opciones interesantes en el git switch que me gustaría contar. Una que me resulta bastante interesante en particular es orphan... no lo encontraba, estoy medio ciego. El orphan sirve para crear ramas en blanco. Esto es algo que con git ya se podía hacer. Es decir, crear una rama que no tiene nada, ni historial ni git log ni archivos. Es una rama que nace del éter. Se podía hacer pero era muy complicado en cierto punto porque había que correr varios comandos.

Ahora es más sencillo que antes porque puedes hacer git switch --orphan, y puedes crear una rama huérfana, que es una rama que no apunta a nada. No tiene punteros apuntando a commits anteriores. Por ejemplo, esto te vale para crear ramas de documentación. Imagina que tienes un repo en el que tienes tu proyecto y tal. Y luego quieres crear una rama nueva para guardar la página web con el manual de instrucciones o lo que sea, pero no quieres que se junten ambos conceptos. Puedes crear una rama huérfana, que es una rama que si miramos su git log está completamente vacío. El working directory también estará vacío. Todo habrá desaparecido porque es como crear un repo en blanco. Pero realmente estás en tus repo. Tienes múltiples ramas con múltiples líneas del tiempo. Creo que ya he hablado de esto alguna vez, de los grafos. Tienes tu línea del tiempo y tienes tus commits. Con orphan puedes tener múltiples líneas del tiempo, todas en paralelo, que van evolucionando a su debido ritmo. Todo muy bonito y todo muy plástico.

Más cositas así interesantes... por ejemplo, si quieres cambiar de rama, y me vengo a main. Y pongamos que vuelvo a hacer una modificación a un archivo, como el README. Cuando yo me cambie de rama, esas modificaciones, o se van a venir conmigo, o me va a decir "no puedes cambiar porque no cuadra...".

Existe en git switch una opción, que es la --discard-changes, que es para, ya aprovechar que cambias de rama para deshacerte de todo. Si le digo git switch --discard-changes probando, me limpia también el working directory. Esto viene bien cuando quieres ponerte con otra cosa y tienes un experimento que no te sale bien pero quieres hacer otra cosa. Puedes limpiarlo ya que estás.

En resumidas cuentas: git switch, un comando para cambiar ramas. Lo mismo que git checkout, pero con switch y más centrado en eso propio.

Nos vemos en próximos vídeos, un saludo y hasta luego.

Fecha de emisión: • Duración: 8:41

Lista de reproducción

Este tema