Git - Merge
Git - Merge
- Fusiona todos los datos/archivos que tengas en una rama o commit distinto con la que estemos trabajando actualmente y tenga el puntero [HEAD] señalando y además de esa fusión se genera un nuevo commit en el historial de commits
Detalle
- Este comando se utiliza para fusionar los datos/archivos del último commit de una rama Padre como por ejemplo [rama Master ] con los datos/archivos del último commit de otra rama Padre llamada por ejemplo [rama Alternativa] generando a su vez un nuevo commit de fusión en una de las ramas Padre descritas anteriormente o en otra rama creada expresamente para unir ambos
commits
anteriores como por ejemplo podría ser la [rama Fusión] la cual fusionará los cambios que queremos realizar
- La integración es un proceso que puede producir conflictos que lo interrumpen y se se tiene que resolver utilizando un editor de código
Ejemplos
-
Integra la rama
<branch>
en el puntero [HEAD] e incluye un mensaje"msg"
como descripción del commit de integración que hemos generado- Los cambios se registrarán en el {Staged/Index/Staging Area} del repositorio principal
-
La integración con conflictos debe completarse utilizando los siguientes comandos
1º Opción : Para confirmar la unión de los contenidos
git merge --continue
2º Opción : Para confirmar la unión de los contenidos
git commit
- Para deshacer la integración de los commits de la rama en la que nos encontremos con la rama que le hayamos indicado y vuelva el archivo a su estado anterior como si no hubiéramos ejecutado ningún comando
git merge --abort
- Si no hay conflictos en la integración de los commits , se generará un commit de integración entre los 2 commits del tipo
auto-merge
git merge -m "msg" <branch>
Integraciones Básicas
-
Las integraciones puede ser sencillas o complejas
-
Dependen de los contenidos de los ficheros/datos que queremos ingresar de un commit de una rama hacia otro commit en otra rama dependiendo de los ancestros comunes que tengan
-
Ficheros/Datos iguales en ambos commits → Incluye el fichero común ( sin conflicto )
-
Ficheros/Datos esta solo en uno de los commits → Incluye el fichero ( sin conflicto )
-
Ficheros/Datos con diferencias en contextos disjuntos → Fusiona ambos ficheros (sin conflictos)
-
Ficheros/Datos con diferencias en el mismo contexto → Une ambos ficheros y genera conflictos
-
Tipos de conflictos dentro de los ficheros
- Ficheros sin conflictos
- Se quedan en el estado {Staging Area/Index/Staged}
- Ficheros con conflictos
-
Se quedan en el estado unmerged
-
Los conflictos quedan marcados en el código mediante el símbolos (+) en verde y debe resolverse con el editor
-
Los resultados de los conflictos deben registrare en el {Staging Area/Index/Staged} y se deben de cerrar cuando salgamos de la ejecución del comando
merge
-
Merge debe cerrarse con el comando
git merge --continue
ogit commit
-
-
Detalle gráfico de la corrección de la solución de conflictos
- Todo lo que este entre
==========
y>>>>>>>>>> master
será lo nuevo añadido a larama fusión
==========
Nuevo Código de la rama master
>>>>>>>>>> master
- Se considera que se añadirá nuevo código a la rama anfitriona que realiza el
git merge <branch>
de la rama que le indiquemos- Para ejemplo sería desde la rama
fusion
ejecutamos el comando
- Para ejemplo sería desde la rama
git merge master
Ejemplo de código a la hora de corregir el conflicto con un editor de código.
<!DOCTYPE html><html><head>
<title>Calculator</title><meta charset="utf-8">
<script type="text/javascript">
# Parte conflictiva de la rama FUSIÓN
<<<<<<<<< HEAD
function inverse(){
var num = document.getElementById("n1");
num.value = 1/num.value;
}
=========
# TODO ESTE CóDIGO SE AÑADE DE LA RAMA MASTER
function square(){
var num = document.getElementById("n1");
num.value = Math.pow(nun.value, 2);
}
>>>>>>>> master
</script>
</head>
<body>
Number:
<input type="text" id="n1"<p>
# Parte conflictiva de la rama FUSIÓN
<<<<<<<<< HEAD
<button onclick="inverse()"> 1/x </button>
=========
# TODO ESTE CóDIGO SE AÑADE DE LA RAMA MASTER
<button onclick="square()"><sup>2</sup></button>
>>>>>>>> master
</body>
</html>
Integración ff (fast-forward)
-
Cuando se ejecuta el comando
git merge
si GIT detecta que sobre la rama que estamos ejecutando este comando se ha realizado anteriormente otra integraciónff (Fast-Foward)
- Si es así avanzará el puntero [HEAD] de la rama hasta el commit que contiene la integración solicitada
-
Siguiendo el ejemplo anterior
- Si hiciéramos de nuevo una integración de commits entre la rama
master
y la ramafusion
, sobre el mismo contenido Git haría en este casoff → (Fast-Foward)
- Si hiciéramos de nuevo una integración de commits entre la rama
Deja un comentario