Guía Completa de Formación en Git
Guía Completa de Formación en Git
A medida que avances, encontrarás instrucciones para realizar prácticas específicas, gestionar
ramas, revertir cambios, y trabajar con repositorios remotos. Te recomendamos que sigas esta guía en
el orden propuesto para garantizar un aprendizaje progresivo y sólido. ¡Empecemos!
1. ¿Qué es Git?
➔ Documento a leer: ‘1. GIT - Control de Versiones’
Este documento te ofrece una visión general de Git, su importancia en el control de versiones, y
cómo se utiliza en el desarrollo de software. Es el primer paso crucial para entender cómo y por qué
usar Git.
Este documento te guiará en los primeros pasos con Git, incluyendo la configuración inicial y los
comandos básicos.
3. Revirtiendo Cambios
➔ Documento a leer: ‘3. Revirtiendo Cambios’
Aquí aprenderás cómo deshacer cambios en Git, tanto a nivel de archivo como de commit.
Este documento explica cómo usar un archivo .gitignore para controlar qué archivos y directorios
deben ser ignorados por Git.
1|3
FORMACIÓN GIT
5. Repositorio Remoto
➔ Documento a leer: ‘5.Repositorio Remoto’
6. Ramas
➔ Documento a leer: ‘6. Ramas’
7. Conflictos
➔ Documento a leer: ‘7. Conflictos’
8. Práctica Bot
➔ Documento a leer: ‘8. Práctica de conflictos con el bot de git’
2|3
FORMACIÓN GIT
9. Contenido Extra.
Si deseas seguir practicando y aprendiendo sobre Git, aquí tienes algunas referencias muy
interesantes:
1. Git Interactivo
Pro-Git
3. Tutorial.
3|3
FORMACIÓN GIT
Contenido
1. Introducción 2
2. Componentes de un controlador de versiones 3
3. Áreas de Trabajo de GIT. 4
4. Instalando Git en Windows 5
1|5
FORMACIÓN GIT
1. Introducción
Cuando desarrollamos software, el código cambia constantemente, es por ello por lo que vamos a
necesitar alguna manera de controlarlo. Git es un sistema de control de versiones distribuido que te
ayuda a realizar un seguimiento de los cambios en tu código y a colaborar con otros.
Pues si te ha tocado en algún momento, de seguro sabes que se suele hacer, lo que
comúnmente se denomina “definitivo definitivo 100% definitivo”, la siguiente imagen lo ilustra
perfectamente:
Ventajas
● Facilita al equipo de desarrollo su labor, permitiendo que varios desarrolladores trabajen sobre
el mismo proyecto de forma simultánea y controlando que no “se pisen los pies”.
● Proveen un sitio central donde almacenan el código fuente de la aplicación, así como el
historial de cambios realizados a lo largo del desarrollo.
● Nos permite, en el caso de necesitarlo, volver a una versión anterior y estable en la etapa del
desarrollo.
2|5
FORMACIÓN GIT
● Repositorio:
Un repositorio es un proyecto que contiene múltiples archivos que está siendo controlado por
GIT y que cuenta con un historial en el que se están registrando los cambios
● Ramas:
Son nuevos caminos que toma el proyecto. La rama principal se llama “master” o “main” y es
donde está el proyecto que sale a producción. Cada vez que se quiere crear una nueva característica o
corregir una existente se crea una rama, de esta forma podemos trabajar en un ambiente aislado.
Esta contiene una copia exacta del proyecto, pero separada. De este modo trabajamos en un
entorno, que en el caso de que fallara, no tendríamos más que eliminarlo sin ocasionar daños.
● Etiquetas (Tags):
Información textual que se añade como complemento a un conjunto de archivos o a un módulo
completo para indicar alguna información importante (como la versión).
● Módulo:
Es un directorio específico del proyecto, puede identificar una parte o ser el proyecto completo.
3|5
FORMACIÓN GIT
En Git, el concepto de "áreas de trabajo" se refiere a las tres principales secciones en las que se
puede dividir el ciclo de vida de los cambios en un repositorio:
● Working area:
Como su nombre indica, este es el directorio de trabajo donde crearemos los archivos,
realizaremos las modificaciones…etc.
Esta área es la que contiene la última versión de los ficheros. Los cambios realizados en el
directorio de trabajo no se registran automáticamente en Git, esto quiere decir que no estamos
protegidos si perdemos esta información a menos que la guardemos y es por eso, que se le suele
considerar a esta área la más volátil.
● Staging area:
Este es el área intermedia en la que preparamos los cambios y modificaciones de los archivos
del working area antes de la validación y el pase al repositorio. Esto te permite seleccionar qué
cambios específicos deseas incluir en el próximo commit. Ayuda a organizar tus cambios y a realizar
confirmaciones más controladas y significativas.
Para pasar nuestro contenido editado a esta área usaremos el comando “add” que va a mover
el contenido del Working Area al Staging Area.
● Local repository:
Este es el directorio que crea GIT donde almacena el historial completo de cambios. Es el área
más segura. Después de agregar los cambios al área de preparación, puedes confirmarlos (commit)
para guardar una versión de esos cambios en el repositorio. Principalmente lo que veremos en esta
área serán todos los puntos de control o commits. Este repositorio también almacena información
sobre todas las confirmaciones anteriores, lo que permite realizar un seguimiento del historial del
proyecto y revertir a versiones anteriores si es necesario.
- GIT Stash:
Además de estas tres áreas principales de trabajo, existe una extra, la ‘Stash’.
En resumen, git stash te permite salvar temporalmente los cambios en tu área de trabajo,
limpiarla para poder cambiar de rama o realizar otras operaciones, y luego recuperar esos cambios
cuando lo necesites. Es una herramienta útil cuando quieres cambiar de contexto rápidamente sin
necesidad de realizar un commit permanente de tus cambios.
4|5
FORMACIÓN GIT
Para instalar Git en Windows, sólo tienes que descargar el instalador y ejecutarlo. Sigue estos sencillos
pasos para hacerlo:
5|5
FORMACIÓN GIT
Práctica GIT
Contenido
1. Iniciando el repositorio. 2
2. Trabajando en el repositorio. 3
1|8
FORMACIÓN GIT
1. Iniciando el repositorio.
Para ir familiarizándonos con los comandos que podemos utilizar vamos a realizar un ejercicio
práctico.
El ejercicio lo vamos a realizar con GIT Bash, la interfaz de línea de comandos de Git, ya
que a pesar de que hay aplicaciones de escritorio gráficas que nos pueden ayudar, lo
más importante es saber manejarse bien con los comandos.
En primer lugar, abriremos el terminal de Git (Git Bash) y creamos un directorio de prueba en el
que vamos a trabajar. Una vez creado accedemos a él y ejecutamos el comando ‘git init’. Con este
comando creamos un repositorio local en el directorio de trabajo.
La terminal nos informa de que hemos iniciado el repositorio y que ha creado en el ‘fichero oculto’
‘.git’. Es importante mantener esta carpeta segura ya que si se pierde entonces perderemos el
repositorio.
Una vez creado el repositorio, la carpeta en la que estamos sería nuestro working directory. Para
ver el estado en el que se encuentra usamos el comando ‘git status’:
Este comando nos indica la rama en la que estamos trabajando y que no hemos realizado ningún
commit hasta la fecha. Esto es lógico ya que acabamos de crear el repositorio y aún no hemos
trabajado en él.
2|8
FORMACIÓN GIT
Cada commit tiene un identificador único que nos permite realizar un seguimiento de la
evolución del código a lo largo del tiempo y tener un registro de los cambios realizados y
por lo tanto, podríamos incluso revertir cambios.
2. Trabajando en el repositorio.
Una vez realizado el cambio, volvemos a comprobar el estado de nuestro repositorio (‘git
status’):
Vemos que Git nos avisa de que el archivo que acabamos de agregar en el directorio no está en
seguimiento. Para añadir los archivos al seguimiento utilizamos el comando ‘git add’:
3|8
FORMACIÓN GIT
Utilizando este comando estaríamos ‘colocando’ los archivos en el área de preparación o staging
area. Los archivos en esta área están listos para ser incluidos en el próximo commit. En otras palabras,
hemos indicado a Git que deseamos incluir esos cambios específicos en nuestro historial de versiones.
Es importante tener en cuenta que los archivos en el staging area no se han confirmado
completamente en el repositorio de Git, será necesario que realicemos un commit para que esos
cambios se guarden permanentemente en el historial de versiones. Para ello usamos el comando ‘git
commit’
Este comando coge los archivos que hemos agregado previamente con ‘git add’ al área de
preparación y los guarda como un nuevo commit en el historial de versiones de Git. El mensaje del
commit proporciona una descripción breve de los cambios realizados en ese commit en particular.
4|8
FORMACIÓN GIT
Para revisar el commit que acabamos de hacer usaremos el comando con ‘git log’. Este
comando nos permite ver el historial de commits en el repositorio de Git. Al ejecutarlo, veremos una
lista de commits junto con información relevante, como el autor, la fecha, y el mensaje asociado al
commit.
Vemos que nuestro commit tiene un código asociado a él, ‘fe731e6ee728326e8abd…’. Este código
nos servirá para poder identificarlo y, como veremos más adelante, volver a ese punto si fuese
necesario.
Si no queremos ver tanta información acerca de los commits, el parámetro ‘--oneline’ hará
que se nos muestre la información en una sola línea.
Ahora que hemos realizado nuestro primer commit, vamos a empezar a hacer cambios en el
repositorio y ver qué ocurre. Para ello, en primer lugar, debemos hacer alguna modificación en el
archivo. Esto lo podemos hacer abriendo el archivo en cualquier editor de texto plano y por ejemplo,
escribiendo ‘Bienvenidos a Nter 2.0’ y una vez hecho, seguimos los siguientes pasos:
5|8
FORMACIÓN GIT
Como vemos tenemos cambios guardados en el staging area y, posteriormente se han vuelto a
hacer cambios sobre el mismo fichero.
Para ver las modificaciones que se han hecho en fichero con respecto a lo que tenemos en el
staging area podemos utilizar el comando ‘git diff’. Este comando nos muestra en rojo la línea
modificada que está guardada en el staging area y en verde la línea de la última modificación que se
ha realizado.
6|8
FORMACIÓN GIT
Si ahora hacemos un commit, debemos tener en cuenta que solo se almacenarán los cambios que
estaban en el staging area y, por lo tanto, si queremos almacenar todos los cambios debemos añadir
las últimas modificaciones.
No obstante, si hacemos ese commit, tenemos la opción de agregar esos cambios al commit
anterior, para ellos usamos el comando ‘git commit --amend’ :
Una vez ejecutemos el git commit --amend se nos abrirá ‘Vim’ un editor de código en el que GIT
nos va a indicar el mensaje descriptivo del commit al que vamos a agregar estos cambios de última
hora, junto con los ficheros involucrados, la fecha, etc. Será algo parecido a lo siguiente:
7|8
FORMACIÓN GIT
Si se te ha abierto en VIM y no sabes salir, tienes que escribir la combinación de teclas ‘:qa!‘
Revirtiendo Cambios
Contenido
1. Introducción. 1
2. ‘git restore’. 1
3. ‘git reset’. 2
4. ‘git revert’. 5
1|7
FORMACIÓN GIT
1. Introducción.
En el mundo del desarrollo no es raro encontrarse con la necesidad de revertir o deshacer
cambios. Ya sea para corregir errores, retroceder a un estado anterior o simplemente explorar
diferentes ramas de desarrollo, conocer las formas adecuadas de revertir cambios en Git es esencial.
Este documento tiene como objetivo ser una guía práctica en el arte de deshacer alteraciones en
Git. Exploramos varias técnicas que abarcan desde revertir cambios locales no confirmados hasta
deshacer confirmaciones previas y restaurar archivos específicos. Descubriremos cómo utilizar
comandos como git checkout y git restore de manera efectiva, así como otras estrategias que te
permitirán mantener el control sobre tu repositorio en cualquier situación.
2. ‘git restore’.
Para empezar, vamos a volver a modificar nuestro archivo ‘home.html’ y vamos a eliminar todo el
cuerpo del documento, como si lo hubiéramos hecho sin querer:
Como podemos ver los cambios están hechos y GIT lo ha detectado, de hecho, si leemos con
atención veremos que nos dice “use ‘git restore <file>’ to discard changes in working directory”, es
decir, que si queremos deshacer los cambios que hemos hecho sin querer, solamente tenemos que
ejecutar dicho comando, añadiendo el fichero del que queremos deshacer los cambios.
2|7
FORMACIÓN GIT
Como vemos ahora ya no tenemos cambios en el working area y, si miramos nuestro archivo,
vemos que ha vuelto al estado anterior:
3. ‘git reset’.
El comando anterior está genial, pero ¿Qué ocurriría si los cambios realizados los hubiéramos
enviado al staging área?
3|7
FORMACIÓN GIT
Vemos que el comando ‘git restore’ no tiene ningún efecto sobre los cambios. Por lo tanto,
para revertir los cambios debemos usar otro comando. En este caso, usaremos el comando ‘git
reset’ que utilizará la información de algún commit anterior para revertir los cambios.
Como vemos, GIT ha eliminado el archivo del staging area, devolviendo los cambios de este
archivo al working directory. Esto quiere decir que ahora sí podemos utilizar nuestro comando de
confianza ‘git restore’ para eliminar los cambios.
Para poder hacer algunas pruebas más con este comando vamos a realizar varios cambios en
nuestro archivo y más commits, para así poder tener más opciones para hacer pruebas y entender
mejor el concepto.
4|7
FORMACIÓN GIT
La intención ahora es utilizar el comando para volver al commit que le indiquemos. Debemos
tener en cuenta que esto eliminará todos los commits que se hicieron después del indicado.
Como podemos ver, tras revertir los cambios, los commits anteriores ha desaparecido y podemos
ver las diferencias con el código anterior.
Hay que tener en cuenta que el comando git reset es peligroso, ya que como hemos
visto, elimina el resto de commits hechos posteriormente al indicado para revertir los
cambios.
4. ‘git revert’.
Por último, veremos el comando ‘git revert’ es otra herramienta en Git que se utiliza para
deshacer cambios en el historial de commits, pero a diferencia de ‘git reset’, no elimina los
commits anteriores ni cambia el historial existente. ‘git revert’ crea nuevos commits que deshacen
los cambios introducidos por los commits que deseas revertir.
En otras palabras, cuando ejecutas ‘git revert’, se crea un nuevo commit que deshace los
cambios introducidos por el commit especificado. Esto es útil cuando quieres mantener un historial de
commits completo y no deseas reescribir la historia del repositorio, especialmente si ya has compartido
el historial con otros.
5|7
FORMACIÓN GIT
Cuando ejecutamos el comando ‘git revert’ debemos tener en cuenta que a veces se pueden
producir conflictos a la hora de intentar fusionar cambios en un archivo.
Git nos está informando sobre el conflicto y a la vez nos proporciona sugerencias sobre cómo
proceder.
Para resolver el conflicto, en primer lugar, debemos abrir nuestro archivo en el editor de código,
Visual Studio Code:
Hacemos click en ‘Resolve in Merge Editor’ y se nos abrirá una nueva pestaña en la que nos
aparecerá a la izquierda la versión futura del archivo, a la derecha la versión actual y, en la parte
inferior, vemos el resultado final del merge. Una vez estemos de acuerdo con los cambios a realizar
hacemos click en ‘Complete merge’.
6|7
FORMACIÓN GIT
Por último, realizamos el commit con los cambios y con esto, habríamos terminado.
7|7
FORMACIÓN GIT
.gitignore
Contenido
1. Introducción. 1
2. Metacaracteres. 3
1|4
FORMACIÓN GIT
1. Introducción.
El archivo .gitignore es esencial en Git para especificar patrones de archivos o directorios que
deben ser ignorados al realizar operaciones como "git add" o "git commit", evitando así la inclusión de
archivos no deseados y mejorando la calidad y consistencia del historial de versiones. Su uso facilita la
colaboración al asegurar que todos los colaboradores del proyecto compartan un entorno de desarrollo
más consistente y libre de archivos innecesarios.
Esta última parte es importante porque como veremos más adelante, en algún momento nuestro
repositorio deberá ser replicado en un servidor remoto, tal como GitLab, y debemos tener en cuenta
que dichas plataformas de alojamiento no brindan capacidad de almacenamiento ilimitada. En el caso
específico de GitLab, la asignación de espacio para cada repositorio se encuentra limitada a 10GB.
La sintaxis del archivo .gitignore permite definir reglas para excluir ciertos archivos o patrones de
archivos, utilizando comodines y convenciones específicas. Por ejemplo, *.log excluye todos los
archivos con extensión ".log", y /logs/ excluye un directorio llamado "logs". Estas reglas proporcionan
flexibilidad para adaptarse a las necesidades específicas de cada proyecto. En la siguiente tabla se
recogen algunos ejemplos:
2|4
FORMACIÓN GIT
Patrones de git.
Ignorar específicamente el
archivo llamado
logs/debug.log, pero no:
**/logs/debug.log "debug.log" que se
logs/build/debug.log
encuentre en cualquier
subdirectorio llamado
"logs",
3|4
FORMACIÓN GIT
2. Metacaracteres.
En el contexto de Git y los archivos de configuración, los metacaracteres son caracteres especiales
que no representan su valor literal, sino que se utilizan para definir patrones. Estos patrones se
emplean comúnmente en archivos como .gitignore para especificar qué archivos o directorios se deben
ignorar.
Aquí tienes una tabla con algunos ejemplos de metacaracteres, su descripción y ejemplos de uso:
[1-9][1-3] → Cadenas
Rango de valores a comparar (Va
- coincidentes: 32, 12, 82 y no
acompañado del [])
coincidentes: 99
Coincide con cero o más
** logs/**/debug
directorios
4|4
FORMACIÓN GIT
Repositorio Remoto
Contenido
1. Introducción. 2
2. Iniciando el repositorio remoto. 3
3. Trabajando con repositorio remoto. 5
1|7
FORMACIÓN GIT
1. Introducción.
En el mundo del desarrollo de software, la colaboración eficiente y la gestión de versiones son
esenciales para construir proyectos exitosos. En este documento, exploraremos la función vital que
desempeñan los repositorios remotos en la facilitación de la colaboración entre equipos y cómo Git, se
convierte en la herramienta fundamental para lograrlo.
● Colaboración:
● Sincronización de cambios:
Los desarrolladores pueden enviar (push) sus cambios al repositorio remoto para que otros
puedan verlos y descargarlos (pull). Esto facilita la colaboración y la integración de cambios.
● Copia de seguridad:
El repositorio remoto sirve como una copia de seguridad centralizada del proyecto. Si tu máquina
local falla, puedes recuperar el código desde el repositorio remoto.
● Facilita la distribución:
● Seguimiento de versiones:
Los repositorios remotos mantienen un historial de versiones del proyecto, lo que facilita la
colaboración y la gestión de cambios a lo largo del tiempo.
Los repositorios remotos suelen estar alojados en plataformas como GitHub, GitLab, Bitbucket u
otros servicios de alojamiento de Git. Estas plataformas ofrecen funciones adicionales, como
seguimiento de problemas, solicitudes de extracción y otras herramientas de colaboración.
2|7
FORMACIÓN GIT
Para acceder a este repositorio desde casa, será necesario conectarse a la VPN (OpenVPN
Connect). Si aún no tienes la VPN configurada, puedes seguir las instrucciones del documento
‘MANUAL INSTALACIÓN VPN’. En caso de estar accediendo desde la oficina, NO será necesario
conectarse a la VPN.
Deberemos iniciar sesión con el correo corporativo de la empresa. Una vez logueados, tendremos
acceso a todos los proyectos en los que seamos miembros.
El siguiente paso será crear un proyecto dentro de nuestra sesión de GitLab y obtener su URL para
clonarlo mediante https:
3|7
FORMACIÓN GIT
4|7
FORMACIÓN GIT
Una vez hecho esto, tenemos que clonar el repositorio remoto en nuestro equipo usando el
comando ‘git clone’.
A la hora de clonar repositorios tenemos que prestar atención al usuario que tenemos
configurado, ya que si el repositorio no es público no podríamos clonarlo.
Para comenzar a trabajar con el repositorio remoto empezaremos añadiendo al directorio local
nuestro archivo ‘home.html’ y hacemos nuestro primer commit:
5|7
FORMACIÓN GIT
Vemos que git nos informa de que nuestro repositorio local está a un commit del repositorio
remoto. Para actualizar el repositorio remoto debemos usar el comando ‘git push’:
Este comando nos sirve para subir los cambios que tenemos en nuestro repositorio local hacia el
repositorio remoto.
Una de las ventajas de GitLab es que tenemos la opción de ver toda la información sobre los
commits realizados de una forma muy intuitiva:
6|7
FORMACIÓN GIT
Por último, nos quedaría ver como actualizar nuestro repositorio local en relación con el
repositorio remoto. Para comenzar necesitamos hacer cambios en el repositorio remoto y para ello
utilizaremos ‘Web IDE’, una utilidad de GitlLab que nos permite editar los archivos de nuestro proyecto
de una forma rápida y sencilla.
Para actualizar los cambios en nuestro repositorio local usamos el comando ‘git pull’:
Este comando actualiza la rama del repositorio local en la que se está trabajando y además nos da
un resumen de las modificaciones que se han realizado.
7|7
FORMACIÓN GIT
Ramas en Git
Contenido
1. Introducción 2
2. Comandos básicos 2
3. Práctica 4
1|9
FORMACIÓN GIT
1. Introducción
En Git, una rama (branch) es una línea de desarrollo independiente que permite trabajar en
funcionalidades, correcciones de errores o mejoras de forma aislada del resto del código.Esta
bifurcación del estado del código permite crear un nuevo camino para la evolución del mismo,
permitiendo realizar modificaciones sin interferir en el desarrollo de la rama principal. Cuando se
completa el desarrollo, una rama se puede unir (merge) con la rama principal para integrar la nueva
versión del código. Cada repositorio de Git puede tener múltiples ramas, y cambiar entre ellas te
permite trabajar en diferentes aspectos del proyecto sin afectar las demás ramas. Esto facilita el
desarrollo colaborativo y la gestión de versiones del código.
2. Comandos básicos
Unset
git branch <nombre_de_la_rama>
Este comando solo crea la rama, no nos sitúa en la nueva rama creada para poder trabajar
en ella.
El comando solo crea la rama en el repositorio local.
Para añadir una rama al repositorio remoto, se debe ejecutar un push de la misma:
Unset
git push origin -u <nombre_de_la_rama>
Unset
git branch
2|9
FORMACIÓN GIT
Unset
git checkout <nombre_de_la_rama>
Unset
git checkout -b <nombre_de_la_rama>
Unset
git branch -d <nombre_de_la_rama>
Para borrar una rama del repositorio remoto, se debe ejecutar el siguiente comando:
Unset
git push origin --delete <nombre_de_la_rama>
● Fusionar/Unir ramas:
Unset
git merge <nombre_de_la_rama>
3|9
FORMACIÓN GIT
Este comando integra los cambios de la rama indicada en la rama en la que estamos
trabajando actualmente.
3. Práctica
Para poder comenzar a usar los comandos de ramas debemos inicializar un repositorio. Vamos a
hacerlo siguiendo estos pasos:
Unset
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,
initial-scale=1.0">
<title>Nter</title>
</head>
<body>
</body>
</html>
3. Dentro de la carpeta practica ramas abre git bash haciendo click derecho y selecciona la
opción Git Bash Here:
4. En la consola que se ha abierto ejecuta el comando: git init. Esto inicializará nuestro repositorio
local.
4|9
FORMACIÓN GIT
5. Al inicializar el repositorio no existe ninguna rama creada. Para poder crear ramas y realizar la
práctica, necesitamos crear una rama principal. Por defecto, en git la rama principal tiene el
nombre master.
Para git esta rama principal no existe todavía, para crearla debemos hacer un primer commit
en ella. Para hacerlo seguimos los siguientes pasos:
Con estos pasos ya tendremos inicializado nuestro repositorio y creada nuestra rama principal master.
Con esto ya tenemos nuestra primera rama creada. Esta rama se crea en base al contenido de
la rama master. Al crear una rama con este comando no nos sitúa automáticamente en la
rama, para cambiarnos a esta tenemos que realizar el siguiente paso.
5|9
FORMACIÓN GIT
En esta nueva rama tendremos el mismo código que tenemos en la rama master.
Luego de esto ya tendremos dos ramas creadas por nosotros a partir de la rama master.
6|9
FORMACIÓN GIT
Unset
git branch
Unset
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,
initial-scale=1.0">
<title>Nter</title>
</head>
<body>
<h1>
Esto es un cambio de la rama nueva_funcionalidad
</h1>
</body>
</html>
7|9
FORMACIÓN GIT
7. Para realizar la fusión/unión (merge) de ramas debemos seguir los siguientes pasos:
1) Debemos movernos a la rama a la cual queremos unir nuestra rama.
En este caso queremos unir la rama nueva_funcionalidad a master.
Para cambiarnos a master ejecutamos el comando:
git checkout master
Si abres de nuevo el archivo home.html, podrás ver que ya la rama master contiene los
cambios de la rama nueva_funcionalidad.
Antes de realizar una fusión/unión (merge) de ramas es buena práctica que la rama que
queremos unir (nueva_funcionalidad) esté actualizada con los últimos cambios que pueda
tener la rama a la que la queremos unir (master). En este caso sabemos que la rama master
no tiene cambios porque solo hemos estado trabajando nosotros sobre este repositorio, pero
en un caso real trabajaremos sobre un repositorio que es utilizado por un equipo de personas
que pueden haber hecho cambios sobre la rama principal mientras nosotros hacemos
nuestro desarrollo en nuestra rama.
Si al realizar la unión (merge) ambas ramas contienen cambios realizados por distintas
personas sobre las mismas líneas de código, esto genera lo que se conoce como un conflicto.
Los conflictos serán explicados en su propia sección, con su respectiva práctica.
8|9
FORMACIÓN GIT
Unset
git branch -d correccion_errores
¡Listo! Con este último paso damos por finalizada la práctica de ramas.
9|9
FORMACIÓN GIT
Conflictos en Git
Contenido
1|7
FORMACIÓN GIT
Este manual ha sido extraído de utilizar el IDE IntelliJ, aunque también se encontrará como se pueden
realizar los cambios dentro del terminal.
2. Práctica guiada
En IntelliJ, selecciona la opción para crear un nuevo proyecto y asegúrate de marcar la opción para
crear el repositorio Git.
En caso de no activar esta opción, tendrás que abrir la consola y ejecutar el comando “git init”
2|7
FORMACIÓN GIT
Dentro del proyecto, crea un fichero llamado “Conflicto.txt”. Dentro de IntelliJ, aparecerá la opción de
añadir el fichero a Git automáticamente:
3|7
FORMACIÓN GIT
Esto es lo mismo que hacer un “git commit -m COMMIT INICIAL DE NUESTRO FICHERO DE PRUEBA”.
Recordar que es muy importante poner un mensaje explicativo dentro del commit, esto facilitará mucho el
trabajo de compañeros que revisen nuestro trabajo.
Una vez estemos situados en la nueva rama, tendremos que modificar el archivo y hacer un commit.
4|7
FORMACIÓN GIT
Realizaremos el mismo paso que en el anterior punto donde creamos la “RamaConlicto1”, pero esta vez
desde la terminal:
Lo primero que tenemos que hacer es cambiarnos a la rama “master” (git checkout master) y realizar
un merge con la Rama1 (git merge RamaConflicto1).
5|7
FORMACIÓN GIT
Ahora tendremos que ver que versión/cambios queremos mantener, OJO hay que tener en cuenta
que si no realizamos una revisión previa de los cambios, podremos perder el trabajo que ha realizado otro
de nuestros compañeros.
Es muy importante tener claro qué cambios finalmente tienen que subir, incluso nos podría interesar
tener los dos cambios. En esta ocasión para resolver el conflicto vamos a unir los dos ficheros:
En el caso de haber realizado la práctica con el terminal, tendremos que modificar el fichero con los
cambios que nos interesen y hacer un commit.
6|7
FORMACIÓN GIT
Una vez realizado el commit veremos el log de git (git log), donde podremos observar los commit
realizados en las dos ramas y la resolución de conflictos aplicada.
7|7
FORMACIÓN GIT
Contenido
1. Introducción 2
2. Creación de proyectos 2
3. Apertura de un proyecto ya existente 4
4. Gestión de Ramas 6
5. Visualización de los cambios realizados 7
6. Commit y push 8
7. Historial de cambios 9
8. Terminal 9
1|9
FORMACIÓN GIT
1. Introducción
IntelliJ IDEA es uno de los entornos de desarrollo integrado (IDE) más utilizados y avanzados,
especialmente popular para el desarrollo de aplicaciones backend. IntelliJ ofrece soporte robusto para
lenguajes de programación como Java, Kotlin, Groovy, y Scala, entre otros. Su potente motor de análisis
de código, herramientas de depuración avanzadas, integración con sistemas de control de versiones
como Git, y soporte para múltiples frameworks y tecnologías (Spring, Hibernate, etc.) lo convierten en
una elección preferida para desarrolladores que trabajan en el desarrollo de software a nivel de
servidor. Además, su interfaz intuitiva y numerosas funcionalidades adicionales mejoran
significativamente la productividad y eficiencia en el desarrollo de aplicaciones complejas.
2. Creación de proyectos
Para empezar con este manual, lo primero que vamos a ver es cómo podríamos generar un
proyecto desde 0.
Pulsando en el botón de “New Project”, nos aparecerá un menú básico de configuración, donde
se podrá configurar el nombre, lenguaje, etc…
2|9
FORMACIÓN GIT
3|9
FORMACIÓN GIT
4|9
FORMACIÓN GIT
5|9
FORMACIÓN GIT
4. Gestión de Ramas
Dentro del IntelliJ podremos directamente crear ramas dentro del proyecto, movernos de rama,
actualizar las ramas, etc…
6|9
FORMACIÓN GIT
7|9
FORMACIÓN GIT
6. Commit y push
Para realizar un commit de un cambio realizado, tendremos que marcar que fichero queremos
“proteger” (git add) y añadir un mensaje para nuestro commit (o marcar la opción amend para poder
sobreescribir el último commit). Debemos recalcar que, directamente podremos realizar un push de los
cambios:
8|9
FORMACIÓN GIT
7. Historial de cambios
Disponemos de una opción para poder visualizar el historial de cambios realizados dentro de una
rama
8. Terminal
Podemos destacar que el IDE cuenta con un terminal, en el cual podremos ejecutar los
comandos directamente, como si fuera la herramienta “GIT Bash”.
9|9
FORMACIÓN GIT
https://code.visualstudio.com/docs/sourcecontrol/overview
Para poder utilizar Git en Visual Studio Code debemos abrir el directorio del repositorio. El
directorio del repositorio es el que contiene en su interior una carpeta oculta que tiene el nombre .git.
En el caso de la imagen, el directorio del repositorio sería gitbot, ya que este es el que contiene en su
interior un carpeta de configuración de repositorio (.git). Esta configuración es leída automáticamente
por VSC al abrir el directorio en el editor.
Si clicamos en el icono de los tres puntos, podremos observar todas las operaciones que
podemos realizar sobre el repositorio: pull, push, fetch, etc.
2|7
FORMACIÓN GIT
También podemos cambiar de rama si clicamos sobre la rama en la que nos encontramos
actualmente, esta acción desplegará un menú con las operaciones de rama. Además de cambiar de
rama también podremos crear una nueva.
3|7
FORMACIÓN GIT
Añadimos los cambios con los cuales deseamos hacer el commit. Esto lo hacemos clicando sobre
el icono +:
4|7
FORMACIÓN GIT
5|7
FORMACIÓN GIT
Por último luego de tener los cambios añadidos y el mensaje escrito, hacemos clic en el botón
commit:
Luego del paso anterior ya tendremos hecho el commit, si lo deseamos podemos realizar un
push de este commit al repositorio remoto clicando en el botón Sync Changes:
Esto hará que salga una ventana para confirmar esta acción. Luego de clicar en OK, se realizará
un pull del repositorio para luego realizar el push.
6|7
FORMACIÓN GIT
Resolución de conflictos
<<<<<<<
=======
>>>>>>>
Las opciones que tenemos para resolver los conflictos son las siguientes:
Aceptar cambios actuales (Accept current change - nos quedamos con los cambios de la rama
actual).
Aceptar cambios entrantes (Accept incoming change - nos quedamos con los cambios de la rama
que estamos uniendo con la nuestra).
Aceptar ambos cambios (Accept both changes - nos quedamos los cambios de ambas ramas).
Los cambios actuales se encuentran en el área verde, mientras que los entrantes se encuentran
en el área azul.
Una vez resuelto el conflicto se puede añadir el archivo para incluirlo en el commit.
7|7
FORMACIÓN GIT
1 | 17
FORMACIÓN GIT
1. Objetivos de la práctica
En esta práctica vamos a centrarnos en la resolución de conflictos haciendo uso de un bot que irá
añadiendo cambios a la rama develop.
En primer lugar, crearemos una rama a partir de la rama develop que posteriormente debemos ir
actualizando a medida que el bot vaya haciendo cambios.(Estos cambios serán notificados por el
formador).
El objetivo de la práctica es definir con qué cambios queremos quedarnos en nuestra rama,
resolviendo los posibles conflictos que surjan. Al comienzo se irá indicando con qué parte del código
debemos quedarnos para obtener el resultado deseado y, a medida que la práctica avance, solo se
facilitará el resultado final y se deberán resolver los conflictos para que el código quede como el ejemplo
indicado.
Nota: Las capturas para mostrar los conflictos están hechas con el IDE Visual Studio Code.
Para realizar esta práctica se puede utilizar el IDE de su preferencia que cuente con una
extensión de Git.
Para realizar todos los ejercicios debemos tener clonado en nuestro ordenador el siguiente
repositorio:
https://gitlab.nfqsolutions.es/evaluanter/gitbot/conflicts-practice
Debemos estar ubicados sobre la rama develop y crear una rama con el nombre:
practica_conflictos_<nombre-apellido>
Esta guía cuenta con 6 ejercicios. Pasa a la siguiente página para comenzar con el ejercicio 1.
2 | 17
FORMACIÓN GIT
2. Práctica
Ejercicio 1
Una vez modificado el archivo de esta forma debemos hacer commit de los cambios y hacer
push en nuestra rama.
Aceptar cambios actuales (Accept current change - nos quedamos con los cambios de la
rama actual)
Aceptar cambios entrantes (Accept incoming change - nos quedamos con lo cambios de la
rama que estamos uniendo con la nuestra)
Aceptar ambos cambios (Accept both changes - nos quedamos los cambios de ambas ramas)
3 | 17
FORMACIÓN GIT
4. Para este ejercicio se quieren conservar los cambios realizados por nosotros en nuestra rama. En
este caso seleccionamos aceptar cambios actuales (accept current change). Al hacer esto el
código quedará igual que antes de realizar la unión.
5. Después de resolver el conflicto, debemos guardar los cambios, hacer commit y push de nuestra
rama.
6. Abre el archivo index.html en un navegador y verás el Hello World con tu nombre sin los cambios
del bot, con esto terminamos el ejercicio 1.
Ejercicio 2
4 | 17
FORMACIÓN GIT
5. Para este ejercicio, se quiere conservar el cambio realizado por el bot. En este caso,
seleccionamos aceptar cambios entrantes (Accept incoming change). Al hacer esto el código de
nuestra rama quedará con los cambios realizados en la rama develop por el bot:
6. Después de resolver el conflicto, debemos guardar los cambios, hacer commit y push de nuestra
rama.
7. Abre el archivo index.html en un navegador y verás que en tu rama ya posees los cambios
realizados por el bot, con esto terminamos el ejercicio 2.
Ejercicio 3
1. Abre el archivo index.html y debajo del código añadido por el bot en el ejercicio anterior coloca
el siguiente texto: <p>New change</p>.
El archivo debe quedar así:
5 | 17
FORMACIÓN GIT
5. Para este ejercicio, se quiere conservar tanto el cambio realizado por el bot en la rama develop
cómo el cambio que hemos realizado en nuestra rama. En este caso, seleccionamos aceptar
ambos cambios (Accept both changes). Al hacer esto el código de nuestra rama quedará de la
siguiente forma:
6. Después de resolver el conflicto, debemos guardar los cambios, hacer commit y push de nuestra
rama.
7. Abre el archivo index.html en un navegador y verás que en tu rama ya posees los cambios
realizados por el bot y por ti, con esto terminamos el ejercicio 3.
6 | 17
FORMACIÓN GIT
Ejercicio 4
1. Abre el archivo index.html y reemplaza el contenido con el siguiente texto:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Conflict Practice</title>
</head>
<body>
<h1>This is a conflict practice</h1>
<div id="line-11-my-branch">
<p>Line 11 of code in my branch</p>
</div>
<br>
<div id="line-17-my-branch">
<p>Line 17 of code in my branch</p>
</div>
<div id="line-21-my-branch">
<p>Line 21 of code in my branch</p>
</div>
<br>
<div id="line-27-my-branch">
<p>Line 27 of code in my branch</p>
</div>
<br>
<div id="line-33-my-branch">
<p>Line 33 of code in my branch</p>
</div>
<br>
7 | 17
FORMACIÓN GIT
8 | 17
FORMACIÓN GIT
5. Deben solucionar los conflictos para que el código muestre el siguiente resultado al abrir el
archivo index.html en el navegador:
6. Una vez que logres que en el navegador se visualice el texto anterior habrás resuelto el conflicto
de manera correcta. Guarda, haz commit y push del cambio en tu rama. Con esto ya has
terminado con el ejercicio.
9 | 17
FORMACIÓN GIT
Ejercicio 5
1. Abre el archivo index.html y reemplaza el contenido con el siguiente texto:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Conflict Practice</title>
</head>
<body>
<h1>This is a conflict practice</h1>
<h3>Open the browser console to see the results</h3>
</html>
<script>
console.log("Addition result: " + addition());
function addition() {
return 2 + 2;
}
</script>
En este ejercicio incorporaremos el uso de Javascript para poder crear funciones. El código
Javascript se encuentra dentro de las etiquetas <script>.
2. Guarda, haz commit y push del cambio en tu rama. Abre el archivo index.html en el navegador.
Después abre la consola del navegador para ver el resultado de la ejecución del código. En
Chrome la consola se abre presionando f12 y luego navegando a la pestaña console.
En la rama develop se han creado más operaciones. En este caso se han añadido las funciones:
restar, multiplicar y dividir. Necesitamos resolver el conflicto de forma que el código contenga la
operación desarrollada por nosotros (sumar) y las tres operaciones creadas que se encuentran en la
rama develop.
Existen conflictos que no se pueden solucionar solo con aceptar los cambios. Para este caso si
elegimos una de las 3 opciones de selección de cambios (entrante, actual o ambos) generará un
resultado no deseado, además de que el código no podrá ser ejecutado porque contendrá errores.
5. Para lograr realizar la unión y que conservemos las funciones con las cuatro operaciones, se
deben realizar algunos cambios de forma manual antes de aceptar los cambios entrantes o
actuales.
Realiza alguna de las dos opciones que se ofrecen a continuación para resolver el conflicto:
11 | 17
FORMACIÓN GIT
12 | 17
FORMACIÓN GIT
13 | 17
FORMACIÓN GIT
Después de de realizar alguna de las dos opciones previas, el código debe quedar de la siguiente
forma:
14 | 17
FORMACIÓN GIT
Ejercicio 6
1. Abre el archivo index.html y reemplaza el contenido con el siguiente texto:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Conflict Practice</title>
</head>
<body>
<h1>This is a conflict practice</h1>
<h2>Congratulations, you have finished the conflict practice with the
bot</h2>
<h3>Open the browser console to see the results</h3>
</html>
<script>
console.log("Addition result: " + addition());
console.log("Subtraction result: " + subtraction(3, 1));
console.log("Multiplication result: " + multiplication());
console.log("Division result: " + division());
function addition() {
return 3 + 3;
}
function subtraction(a, b) {
return a - b;
}
function multiplication() {
return 2 * 2;
}
function division() {
return 6 / 2;
}
</script>
15 | 17
FORMACIÓN GIT
5. Resuelve los conflictos para que al abrir el archivo index.html veas el siguiente resultado en el
navegador y en su consola:
16 | 17
FORMACIÓN GIT
17 | 17