Cambiar de rama es algo que debes hacer con frecuencia en Git.

Para hacer esto, puedes usar el comando git checkout.

Cómo crear una nueva rama en Git

Para crear una nueva rama en Git, usa el comando git checkout y pasa el indicador -b con un nombre.

Esto creará una nueva rama a partir de la rama actual. El historial de la nueva rama comenzará en el lugar actual de la rama de la que "se ramificó".

Suponiendo que actualmente te encuentras en una rama llamada master:

(master)$ git checkout -b mi-función
Switched to a new branch 'mi-función'
(mi-función)$

Aquí puedes ver una nueva rama creada llamada mi-función que se ramificó de master.

Cómo cambiar a una rama existente en Git

Para cambiar a una rama existente, puedes usar git checkout nuevamente (sin el indicador -b ) y pasar el nombre de la rama a la que desea cambiar:

(mi-función)$ git checkout master
Switched to branch 'master'
(master)$

También hay un atajo útil para volver a la rama anterior en la que estabas, pasando  -  a  git checkout en lugar de un nombre de rama:

(mi-función)$ git checkout -
Switched to branch 'master'
(master)$ git checkout -
Switched to branch 'mi-función'
(mi-función)$

Cómo salir una confirmación específica

Para salir o cambiar una confirmación específica, también puedes usar  git checkout  y pasar el SHA de la confirmación en lugar de un nombre de rama.

Después de todo, las ramas en realidad solo son indicadores y rastreadores de confirmaciones específicas en el historial de Git.

Cómo encontrar un SHA de una confirmación

Una forma de encontrar el SHA de una confirmación es ver el registro de Git.

Puedes ver el registro usando el comando  git log:

(mi-función)$ git log
commit 94ab1fe28727b7f8b683a0084e00a9ec808d6d39 (HEAD -> mi-función, master)
Author: John Mosesman <johnmosesman@gmail.com>
Date:   Mon Apr 12 10:31:11 2021 -0500

    Este es el segundo mensaje de confirmación.

commit 035a128d2e66eb9fe3032036b3415e60c728f692 (blah)
Author: John Mosesman <johnmosesman@gmail.com>
Date:   Mon Apr 12 10:31:05 2021 -0500

    Este es el primer mensaje de confirmación.

En la primera línea de cada confirmación, después de la palabra commit, hay una larga cadena de caracteres y números: 94ab1fe28727...

Esto se llama SHA. Un SHA es un identificador único que se genera para cada confirmación.

Para ver una confirmación específica, solo necesitas pasar el SHA de la confirmación como parámetro para git checkout:

(mi-función)$ git checkout 035a128d2e66eb9fe3032036b3415e60c728f692
Note: switching to '035a128d2e66eb9fe3032036b3415e60c728f692'.

Estás en estado de 'HEAD separada'. Puedes mirar a tu alrededor,
hacer cambios experimental y confirmaciones, y puede descartar cualquier
confirmación que realices en este estado sin afectar a ninguna rama
cambiando de nuevo a una rama.

Si deseas crear una nueva rama para retener las confirmaciones que creas, puedes
hazlo (ahora o más tarde) usando-c con el comando switch. Ejemplo:

  git switch -c <nombre-de-nueva-rama>

O deshaz esta operación con:

  git switch -

Desactiva este consejo configurando el consejo de la variable de configuración. HEAD separada a falso

HEAD ahora está en 035a128 a
((HEAD separada en 035a128))$
Nota: Por lo general, solo necesitas usar los primeros caracteres de SHA—ya que los primeros cuatro o cinco caracteres de la cadena probablemente sean únicos en todo el proyecto.

¿Qué es un estado HEAD separada?

El resultado de ver una confirmación específica lo coloca en un "estado HEAD separada".

De la documentación:

[un estado HEAD separada] significa simplemente que HEAD se refiere a una confirmación específica, en lugar de referirse a una rama nombrada

Básicamente, HEAD (uno de los indicadores internos de Git que rastrea dónde se encuentra en el historial de Git) se ha desviado de las ramas conocidas, por lo que los cambios desde este punto formarían una nueva ruta en el historial de Git.

Git quiere asegurarse de que eso es lo que pretendes, por lo que te brinda una especie de "espacio libre" para experimentar, como se describe en el resultado:

Estás en estado de 'HEAD separada'. Puedes mirar a tu alrededor,
hacer cambios experimental y confirmaciones, y puede descartar cualquier
confirmación que realices en este estado sin afectar a ninguna rama
cambiando de nuevo a una rama.

Desde esta posición tienes dos opciones:

  • Experimenta y luego desecha tus cambios volviendo a tu rama anterior
  • Trabaja desde aquí y comienza una nueva rama desde este punto

Puedes usar el comando git switch - para deshacer cualquier cambio que hayas realizado y volver a tu rama anterior.

Si, en cambio, deseas mantener tus cambios y continuar desde aquí, puedes usar git switch -c <nueva-rama-nombre> para crear una nueva rama desde este punto.

Conclusión

El comando git checkout es un comando útil y multipropósito.

Puedes usarlo para crear nuevas ramas, ver una rama, ver confirmaciones específicas y más.