Sin embargo el concepto de branch no es muy claro cuando empezamos a utilizar esta herramienta que controla las versiones de nuestros proyectos. Usualmente en otros sistemas de control de versiones no se llevan las ramificaciones de un proyecto con este concepto.
¿Por qué utilizar branches?
Muchos ya estarán utilizando Git y no le han prestado mayor atención a los branches, y en cierto modo es comprensible ya que al manejar un solo branch y si el desarrollo lo está llevando una sola persona no debería existir inconveniente alguno.
Pero qué pasaría si esta persona quiere probar unas características experimentales que pueden causar que su proyecto falle o simplemente que afecte la estabilidad del mismo, algunos dirán que se puede hacer un fork del proyecto y continuar experimentando y si la mejora resulta exitosa se piensa luego en incorporar lo que se hizo en el fork dentro del proyecto principal. Esto realmente es un trabajo un poco extenso e innecesario.
En el caso expuesto simplemente con crear un nuevo branch dentro del proyecto en cuestión podemos hacer todos los cambios y experimentaciones deseadas y al finalizar simplemente con hacer un merge o fusión con el branch inicial o principal ya habremos unido todos nuestros cambios.
Nombrando los branches
Ya entendemos las razones que nos llevan a utilizar branches y estamos familiarizados con el concepto, ahora vamos a ver una parte que es vital para el uso de esta característica de Git y es colocarle un nombre a nuestro branch.
Gracias a que podemos utilizar comodines de búsqueda, podemos nombrar nuestros branches de forma jerárquica, por ejemplo, Imp_Bug/89 o Impl_Bug/23. Esto hace que podamos ubicarlos y organizarlos con temas. Veamos como llevamos lo explicado a nuestro repositorio de pruebas:
En este caso tenemos un branch master y hemos creado varios branches que son de resolución de bugs, si ejecutamos el comando git branch en la consola de Git dentro de la carpeta de nuestro proyecto obtendremos un listado con todos los branches existentes, veamos como luce cuando lo ejecutamos:
Vemos entonces el listado de todos nuestros branches y en un color diferente vemos el branch en el cual estamos en ese justo momento. Pero qué pasa si tenemos una gran cantidad de branches y necesitamos filtrar solo los branches de resolución de bugs, pues ahí entra en juego la búsqueda por comodines. Por ejemplo si queremos buscar de esta forma debemos hacer un comando similar al siguiente:
git show-branch impl_bug/*
Veamos como luce esto en nuestra consola:
Podemos notar entonces que se nos muestran todos los branches y a un lado tenemos el comentario del último commit que fue hecho en ellos.
Mejores prácticas al colocar nombres de branches
Debido a que la colocación de nombres de branch es algo totalmente arbitrario y a juicio del usuario, muchas veces se llega a confusiones dentro de un equipo, es por ello que podemos seguir algunas recomendaciones y mejores prácticas, de esta forma seremos mejores usuarios dentro de la herramienta:
- A pesar que podemos utilizar el símbolo / en el nombre de nuestros branches, este no puede ser el carácter final de un nombre.
- No podemos colocar un punto (.) luego de un slash (/).
- No podemos colocar dos puntos seguidos (..) dentro de un nombre.
- No debemos utilizar los caracteres especiales (~ ^ : ? * [ ) ya que estos caracteres tienen un significado dentro de la sintaxis de Git y se pueden prestar a errores.
- Tampoco debemos tener espacios en blanco o caracteres de control ASCII.
El checkout
Si tenemos un listado de branches y estamos en un branch pero queremos pasar a otro, simplemente debemos utilizar el siguiente comando:
git checkout nombre-del-branch
Con ello cambiaremos de branch inmediatamente, pudiendo de esta forma trabajar en varias secciones del proyecto sin problemas. Veamos cómo podemos cambiar de branch dentro de nuestro repositorio de pruebas:
Como notamos es algo bastante sencillo, sin embargo si hacemos algún cambio dentro de este branch y no le hacemos commit al intentar cambiar a otro obtendremos un error y Git nos anuncia que debemos hacer algo ya que si no los cambios pueden perderse:
Cuando este problema sucede debemos hacer un commit y luego al pasar al siguiente branch veremos el contenido del otro branch.
Crear un nuevo branch
Para crear un nuevo branch vamos a seguir utilizando el comando checkout, sin embargo en este caso debemos agregar la opción -b, con ello haremos una copia del branch actual y generaremos uno totalmente nuevo. Veamos como luce en nuestra consola:
Notamos como una vez creado el nuevo branch inmediatamente Git nos lleva a él y podremos empezar a trabajar directamente.
Borrar un branch
Aunque no es muy común, hay casos en los que deseamos borrar un branch de nuestro repositorio y Git nos permite hacerlo, solo que no podemos borrar el branch en el cual estamos en el momento, para evitar inconsistencias con la herramienta. Para realizar esta operación es tan fácil como aplicar el siguiente comando:
git branch -d nombre-del-branch
Veamos como luce en la consola la ejecución de este comando:
Al finalizar su ejecución vemos como Git nos confirma la eliminación del branch correspondiente.
Resolución de conflictos
Hay veces en las cuales hemos tocado la misma línea en un archivo en dos branches diferentes, esto al momento de hacer merge nos va a generar un conflicto. Git nos ayuda estableciendo una diferenciación del conflicto dentro del archivo, por lo que al resolverlo debemos hacer un nuevo commit y un nuevo merge. La diferenciación es mostrada de la siguiente forma en el archivo en cuestión:
una linea cualquiera <<<<<<< master:NuevoCambio una nueva linea ======= la linea anterior >>>>>>> dev:NuevoCambio
Si deseamos resolver el conflicto hay que eliminar el contenido de Git, es decir, las líneas con <<<<< y >>>>, así dejamos el cambio que deseamos o unificamos todo, al hacer esto ya Git no nos presentará más el error y podremos hacer el merge normalmente.
Con esto finalizamos este tutorial, ya podremos sacar mucho más provecho de nuestro repositorio en Git y con ello administrar de gran forma nuestro equipo. Ya debemos tener cubierta la base para el manejo de branches en Git, con ello podremos hacer una administración adecuada de nuestros cambios de forma que podamos mantener al mínimo los conflictos, sobre todo cuando trabajamos en equipos de dos o más personas.