git branch comando: crear, eliminar, checkout, lista, cambiar nombre, opción
En este post, cubriremos cómo entender correctamente las ramas y cómo crear, borrar, cambiar, verificar, renombrar y otras opciones usando el comando git branch
.
1. Entendiendo git branch
Las ramas son una característica clave de la colaboración en Git. En los sistemas de archivos tradicionales, si querías modificar el mismo archivo al mismo tiempo, la única manera de hacerlo era hacer copias, modificarlas por separado, y luego fusionarlas de nuevo manualmente. Con las ramas, Git permite realizar diferentes operaciones sobre el mismo archivo al mismo tiempo, casi como un multiverso.
El principio en el que se basa esta útil función es, en realidad, bastante sencillo. En los posts anteriores git add y git commit, mencionamos que un objeto commit, que almacena información sobre un único commit, tiene un ID para su commit padre. El historial de confirmaciones está eventualmente enlazado por el ID de la confirmación padre para cada confirmación.
Una rama es sólo una etiqueta de nombre que apunta a la confirmación más reciente en este historial de confirmaciones.
Si estamos trabajando en la rama main
, el nombre de la rama main tiene el ID de la última confirmación en el historial de confirmaciones actual.
Esto se parece a la siguiente imagen
Como la confirmación B conoce el ID de la confirmación A, 2b89
, las dos confirmaciones pueden enlazarse por el historial.
Y como la rama llamada main
conoce el ID de la confirmación B, 991b
, que es la última confirmación en ese historial, llamamos a la rama actual main
.
Si hiciéramos un nuevo commit en la rama actual, el ID del último commit en la etiqueta main
cambiaría al ID del nuevo commit.
Esto tendría el siguiente aspecto
De esta forma, el ID del último commit es la única información utilizada para implementar la función de rama. E incluso cambiar de rama, que veremos en la siguiente sección, es sólo cuestión de saltar al commit apropiado basándose en el iD de la lista de ramas.
Si fuéramos a crear una nueva rama y hacer un nuevo commit en esa rama, se vería algo como esto
Si creas una nueva rama llamada topicA
en la rama main
, tanto main
como topicA
apuntarán a v274
. Cuando creas un nuevo commit en la rama topicA
, la rama topicA
cambia para apuntar al ID del commit D 1g8c
.
En esta situación, cambiar a la rama main
te llevaría a la confirmación C, y volver a la rama topicA
te llevaría a la confirmación D. Es importante recordar que una rama es una etiqueta de nombre para el ID de la última confirmación.
2. Obteniendo una lista de ramas locales y remotas
El comando para ver todas las ramas en el repositorio local actual es
$ git branch
En este caso, la rama marcada con un *
es la rama de trabajo actual. El resultado de la ejecución será
El comando de listado git branch
está disponible con las opciones -r
y -a
. Úsalas para imprimir sólo las ramas remotas, o tanto las locales como las remotas.
Utilízalas de la siguiente forma
3. Crear una nueva rama
Para crear una nueva rama que apunte al mismo commit que la rama actual, puedes usar tres comandos, con ligeras diferencias.
En primer lugar, el comando de abajo es el comando más básico de creación de ramas.
$ git branch <new-branch-name>
El segundo comando consiste en crear una rama y desplazarse inmediatamente a ella. Puede omitir el paso de crear y luego mover.
$ git checkout -b <new-branch-name>
El último comando es más reciente que checkout
y produce el mismo resultado. Este es el método recomendado.
$ git switch -c <new-branch-name>
Aquí está el resultado de la ejecución
Tras crear una nueva rama como se ha descrito, se ha realizado el cambio en dicha rama.
4. Copia la rama remota a tu entorno local
Para copiar una rama creada en un repositorio remoto a tu entorno local, utiliza la opción -t
con el comando checkout
o switch
. Si no especifica un nuevo nombre de rama, se copiará con el mismo nombre que la rama remota.
$ git checkout -t <remote-name>/<branch-name>
o
$ git switch -c <new-branch-name> -t <remote-name>/<branch-name>
Aquí está el resultado de la ejecución
Se ha creado una rama feature-a
en tu entorno local, siguiendo la rama feature-a
en el repositorio remoto.
5. Moverse a la rama de cambios
Hay dos comandos que puede utilizar para cambiar la rama en la que está trabajando. Son checkout y switch. checkout es un comando tradicional que te permite navegar no sólo por ramas, sino también por commits, etiquetas y otros criterios. switch es un comando relativamente nuevo que fue creado únicamente para la manipulación de ramas. Para un uso seguro de Git, recomendamos usar el comando switch con su funcionalidad limitada.
He aquí cómo utilizar ambos comandos
$ git checkout <branch-name>
o
$ git switch <branch-name>
Este es el resultado de la ejecución
6. Cómo borrar y deshacer el borrado de una rama
Hay dos formas de borrar una rama Git. La primera es borrar una rama que ya ha sido fusionada, y la segunda es borrar una rama que no ha sido fusionada.
6.1. Borrar una rama
El comando para borrar una rama que ha sido fusionada es el siguiente. No puedes borrar la rama en la que estoy trabajando actualmente, así que por favor ve a otra rama y entra en ella.
$ git branch -d <branch-name-merged>
En este caso, la confirmación de fusión tiene el último ID de confirmación de la rama que está borrando como su ID de confirmación padre. Por lo tanto, todos los commits que pertenecían a la rama permanecerán en el historial de commits de este repositorio.
Estos son los comandos para borrar una rama que no ha sido fusionada.
$ git branch -D <branch-name-not-merged>
En este caso, el puntero a la confirmación que pertenecía a la rama que estás borrando desaparece. Esto se conoce como un estado de confirmación colgado o huérfano, y el recolector de basura de Git se encarga de limpiar estas confirmaciones inaccesibles.
Primero, veamos el resultado de borrar una rama fusionada.
1Resultados de borrar una rama tras una fusión
El gráfico de registro de git muestra que hemos fusionado la rama feature-c
con la rama develop
.
Si luego borras la rama feature-c
y vuelves a imprimir el gráfico de registro, la rama feature-c
habrá desaparecido, pero los commits de esa rama seguirán en el historial.
Esto se debe a que el commit de fusión, 0dd7b0b
, tiene los IDs tanto del commit 80d10f1
en la rama develop
como del commit 8480ae1
en la rama feature-c
.
Este es el resultado de borrar la rama no fusionada
Si miras el gráfico de registro de arriba, puedes ver que hemos creado una nueva rama feature-d
en la rama develop
y hemos hecho un nuevo commit. Después borramos la rama feature-d
sin fusionarla, y desapareció del gráfico de registro.
6.2. Deshacer el borrado de una rama
Por último, vamos a ver cómo deshacer el borrado accidental de una rama. Como habrás notado, el comando borrar rama imprime un mensaje de éxito y el ID de la última confirmación a la que apuntaba la rama.
Por ejemplo, 3a31806
en el mensaje Deleted branch feature-d (was 3a31806)
. Puedes ver esto en la captura de pantalla anterior.
Para deshacer el borrado de una rama, necesitas usar un commit ID como este. El comando tiene este aspecto Pon el ID de confirmación en la parte <base-commit-id>
.
$ git branch <branch-name> <base-commit-id>
Vamos a revertir las dos ramas que borramos arriba con este comando
El historial de confirmaciones tendrá este aspecto
Puedes ver que las ramas feature-c
, feature-d
han sido resucitadas de sus ubicaciones anteriores.
6.3. Borrar una rama remota
Todos los servicios de alojamiento Git soportan el borrado de una rama remota con una GUI, pero también puedes borrarla con un comando.
El comando tiene el siguiente aspecto.
$ git push <remote-name> --delete <branch-name>
Este es el resultado de ejecutar
Si hay una rama en tu entorno local que sigue a la rama remota que has borrado, no se borrará junto con ella. Por favor, bórrala usando el comando que aprendimos en la Sección 61 .
7. Conclusión
El comando git branch
es la base para trabajar en múltiples proyectos a la vez, y son estos conceptos los que hemos cubierto. Espero que este artículo te haya ayudado a entender y usar branch correctamente.
