Git y GitHub Con Ramas
Git y GitHub Con Ramas
TUTORIAL: GUÍA DE
GIT Y GITHUB CON
RAMAS
GUÍA DE GIT Y GITHUB CON RAMAS
Un repaso de los comandos que ya aprendimos
Git Init
Git Status
Git Add
Git Commit
Git Push
1
RAMAS EN GIT
En la guía anterior vimos que las ramas nos ayudan a trabajar en conjunto y evitar problemas
y colisionar código permanentemente. Nosotros podemos crear nuestra propia rama del
proyecto y hacer todos los cambios que necesites, y al final del proceso crear un pull request
para mergear (juntar tus cambios) con la rama principal, main o master.
Ahora veremos como se crea un rama propia, como borrarlas y como unir nuestras ramas
con la rama principal (rama main)
Volvamos un segundo al comando git branch, esto nos dará el listado de ramas que
tengamos en un proyecto. Pero hay que advertir que las ramas de un repositorio local
pueden ser distintas de las ramas de un repositorio remoto. Por ejemplo, cuando clonas un
repositorio de GitHub generalmente estás clonando únicamente la rama master y no todas
las ramas que se hayan creado a lo largo del tiempo. Otro ejemplo es cuando creas una
rama en tu repositorio local. En este caso la rama la tendrás simplemente en tu proyecto
local y no se subirá al repositorio remoto hasta que no lo especifiques.
Podemos obtener una descripción más detallada de las ramas con este otro comando:
git show-branch
Esto nos muestra todas las ramas del proyecto con sus commits realizados. La salida sería
como la de la siguiente imagen.
2
Como podemos ver la rama nueva ya tiene el primer commit que realizamos en la rama
master porque como explicamos más arriba, estamos clonando la rama master.
Esta sencilla operación tiene mucha potencia, porque nos cambiará automáticamente todos
los archivos de nuestro proyecto, los de todas las carpetas, para que tengan el contenido en
el que se encuentren en la correspondiente rama.
De momento en nuestro ejemplo las dos ramas tenían exactamente el mismo contenido,
pero ahora podríamos empezar a hacer cambios en el proyecto ramaGit y sus
correspondientes commit y entonces los archivos tendrán códigos diferentes, de modo que
puedas ver que al pasar de una rama a otra hay cambios en los archivos.
Al igual que explicamos antes cada vez que quieras subir un cambio a tu branch sitúate en
ella y ejecuta los comandos:
Habiendo hecho un commit en nuestra nueva rama, observarás que al hacer el show-
branches te mostrará nuevos datos:
3
Si te dedicas a editar tus ficheros, crear nuevos archivos y demás en las distintas ramas
entonces podrás observar que al moverte de una a otra con checkout el proyecto cambia
automáticamente en tu editor, mostrando el estado actual en cada una de las ramas donde
te estás situando. Es algo divertido y, si eres nuevo en Git verás que es una magia que resulta
bastante sorprendente.
Como podras ver, el proyecto puede tener varios estados en un momento dado y tú podrás
moverte de uno a otro con total libertad y sin tener que cambiar de carpeta ni nada parecido.
La operativa de publicar una rama en remoto la haces mediante el comando push, indicando
el nombre de la rama que deseas subir. Por ejemplo de esta manera:
Si no quieres poner siempre origin y el nombre de tu rama en tus push, tienes que sumarle
al push anterior, -u antes de la palabra origin. Esto hará que puedas poner git push solamente
y vaya siempre a esa rama.
git push
Una vez que hagamos para ver las ramas, primero iremos a branches:
4
Y ahí podremos ver las dos ramas
Puedes subir tanto commits creas convenientes a tu branch antes de mergear a master,
siempre es mejor pequeños y frecuentes cambios que pocos y grandes.
FUSIONAR RAMAS
A medida que crees ramas y cambies el estado de las carpetas o archivos tu proyecto
empezará a divergir de una rama a otra. Llegará el momento en el que te interese fusionar
ramas para poder incorporar el trabajo realizado a la rama master.
El proceso de fusionado se conoce como merge y puede llegar a ser muy simple o más
complejo si se encuentran cambios que Git no pueda procesar de manera automática. Git
para procesar los merge usa un antecesor común y comprueba los cambios que se han
introducido al proyecto desde entonces, combinando el código de ambas ramas.
5
Para hacer un merge nos situamos en una rama, en este caso la "master", y decimos con
qué otra rama se debe fusionar el código.
El siguiente comando, lanzado desde la rama "master", permite fusionarla con la rama
"ramaGit".
PULL REQUEST
Previamente habíamos fusionado nuestras ramas a través del comando merge, pero GitHub
nos permite fusionar nuestras ramas y además ver los cambios que hay entre una rama y
otra, gracias al Pull Request
Vamos a pararnos de nuevo en una etapa en donde no hemos mergeado las ramas. Hasta
ese punto habíamos logrado independizar nuestros cambios de los del resto del equipo,
pero se acercaba la hora de publicar nuestros cambios y surge la necesidad de conocer y/o
validar cuan diferente es nuestra versión y de ver que todo está bien fusionar esos cambios.
Aquí es donde la herramienta de pull request viene al rescate.
Para crear un pull request debemos ir a la sección de branches, buscar nuestro branch y
clickear en el botón New pull request.
Antes de hacer nuestro pull request, podemos ver, cuantos commits (cambios) son los que
separan a otra rama de master. Si nos fijamos nos salen dos ceros, pero si master estuviera
un commit por delante de alguna rama saldrían un uno en el cero de la izquierda y asi se
incrementa el numero según la cantidad de commits que este por delante master. Ahora, si
el numero estuviera a la derecha, sería que la otra rama está x commits por delante master.
6
Como podemos ver ramaGit está un commit por delante de master, por lo que si
mergeamos las ramas, sería solo un commit el que se le aplicaría a master.
Referencias:
Hasta este momento aún no hemos creado nada, solo estamos viendo un resumen previo,
para continuar clickeamos en el botón “Create pull request”. A continuación, veremos el pull
request creado de la siguiente manera.
7
Por otro lado podemos usar la pestaña de “Files changed” para hacer code review.
Si detectamos alguna línea de código que requiera cambios puedes clickear sobre ella y
agregar un comentario para que el autor del pull request lo modifique. No es necesario
volver a crear un nuevo pull request para actualizar los cambios, simplemente haciendo un
commit sobre el branch es suficiente, GitHub toma los cambios y actualiza el pull request
automáticamente.
8
Si esta todo bien y no hay conflictos podemos mergear nuestro branch a master clickeando
en el botón “Merge pull request” y de eso modo finaliza el ciclo del branch.
Finalmente tenemos la opción de aprobar los cambios para que el autor del pull request
mergee su cambio.
Una vez que unamos los cambios en nuestra ramas nos va a salir que la rama ha sido
mergeada.
9
Debes prestar especial atención a esta opción "-D", ya que al eliminar de este modo pueden
haber cambios que ya no se puedan recuperar. Como puedes apreciar, es bastante fácil de
confundir con "-d", opción más segura, ya que no permite borrado de ramas en situaciones
donde se pueda perder código.
El proceso para obtener una rama del repositorio remoto es bien sencillo. Primero usaríamos
el comando git checkout para crear la rama que nos falta en local y usamos el -b para
pararnos en ella.
GIT PULL
Acabamos de ver que usamos el comando git pull para descargar la rama, asi que vamos a
explicar un poco más de este comando.
Git pull es un comando de Git utilizado para actualizar la versión local de un repositorio
desde otro remoto.
Es uno de los cuatro comandos que solicita interacción de red por Git. Por default, git
pull hace dos cosas.
2. Actualiza las referencias de rama remota para todas las demás ramas.
git pull recupera (git fetch) las nuevas confirmaciones y las fusiona (git merge) en tu rama
local.
10
Sin embargo, hay algunas cosas que hay que tener en cuenta para que ese ejemplo sea
cierto:
• Si existen múltiples remotos, git pull podría no ser suficiente información. Es posible
que debas ingresar git pull origin o git pull upstream.
CLONAR UN REPOSITORIO
Ahora vamos a hablar de la operativa de clonado de un repositorio, el proceso que tienes
que hacer cuando quieres traerte el código de un proyecto que está publicado en GitHub y
lo quieres restaurar en tu ordenador, para poder usarlo en local, modificarlo, etc.
Este paso es bastante básico y muy sencillo de hacer, pero es esencial porque lo necesitarás
realizar muchas veces en tu trabajo como desarrollador. Además intentaremos
complementarlo con alguna información útil, de modo que puedas aprender cosas útiles y
un poquito más avanzadas.
DESCARGAR VS CLONAR
Al inicio de uso de un sitio como GitHub, si no tenemos ni idea de usar Git, también podemos
obtener el código de un repositorio descargando un simple Zip. Esta opción la consigues
mediante el botón de la siguiente imagen.
Sin embargo, descargar un repositorio así, aunque muy sencillo no te permite algunas de las
utilidades interesantes de clonarlo, como:
• No crea un repositorio Git en local con los cambios que el repositorio remoto ha
tenido a lo largo del tiempo. Es decir, te descargas el código, pero nada más.
• No podrás luego enviar cambios al repositorio remoto, una vez los hayas realizado
en local.
En resumen, no podrás usar en general las ventajas de Git en el código descargado. Así que
es mejor clonar, ya que aprender a realizar este paso es también muy sencillo.
11
CLONAR EL REPOSITORIO GIT
Entonces veamos cómo debes clonar el repositorio, de modo que sí puedas beneficiarte de
Git con el código descargado. El proceso es el siguiente.
Primero copiarás la URL del repositorio remoto que deseas clonar (ver el icono "Copy to
clipboard” en la siguiente imagen).
Luego abrirás una ventana de terminal, para situarte sobre la carpeta de tu proyecto que
quieras clonar. Yo te recomendaría crear ya directamente una carpeta con el nombre del
proyecto que estás clonando, o cualquier otro nombre que te parezca mejor para este
repositorio. Te sitúas dentro de esa carpeta y desde ella lanzamos el comando para hacer
el clon, que sería algo como esto:
De esta manera nosotros ya tenemos el repositorio remoto para trabajar local y podremos
hacer los cambios que queramos y subir los cambios con los comandos que explicamos
previamente.
Ahora, como hacemos cuando queremos que varias personas trabajen en un mismo
repositorio y queremos que GitHub les deje subir esos cambios. Para ese dilema GitHub nos
deja invitar colaboradores a nuestro proyecto. Esto se hará de la siguiente manera:
12
1. Solicita el nombre de usuario de la persona que estás invitando como colaboradora.
2. En GitHub, visita la página principal del repositorio.
3. Debajo de tu nombre de repositorio, da clic en Configuración.
13
8. El usuario recibirá un correo electrónico invitándolo al repositorio. Una vez que
acepte la invitación, tendrá acceso de colaborador a tu repositorio. Las invitaciones
pendientes caducarán después de 7 días. Esto restablecerá cualquier licencia sin
reclamar.
14
EJERCICIOS DE APRENDIZAJE
Ahora es momento de poner en practica todo lo visto en la guía.
1. Para el siguiente ejercicio, van a tener que trabajar en equipo, con sus compañeros de
mesa.
2. Ahora van a continuar trabajando como mesa. Vuestra tarea ahora es que cada miembro
de la mesa, incluido el facilitador, debe crear su branch y crear una de las siguientes
clases: Gato, Perro, Caballo, Conejo, Pájaro y Pato. Cada uno le va a poner los atributos
que desee.
El facilitador va a tener que crear el repositorio y subir un proyecto de Java vacio para
que los miembros de la mesa puedan clonar y crear su clase. Una vez que cada miembro
haya creado su clase en su respectiva rama, deberán unir todas las clases en la rama
master, para que quede el proyecto final.
15