5.1 KiB
title | localeTitle |
---|---|
Understand How to Use Git Merge | Entender cómo usar Git Merge |
Digamos que está trabajando en una aplicación que es similar a Reddit, pero específicamente para fragmentos de código. En una aplicación de este tipo, es probable que tenga una rama master
que contenga todas las funciones liberadas, una rama dev
que pueda contener funciones que se hayan codificado, pero que aún no se hayan implementado. Todos los desarrolladores en el equipo creará sus propias ramas de la dev
rama para las características individuales. La estructura del repositorio se vería así:
--- Commit 3 --------- dev branch
/
--- Commit 1 ---- Commit 2 ---------------------------- master branch
Si decide fusionar el tercer commit ( Commit 3
) en la rama master
de la rama dev
, entonces sería tan simple como ejecutar un comando git merge
porque la rama dev
está actualizada con la rama master
: todos las confirmaciones en la rama master
existen en la rama dev
. Puedes fusionar las ramas ejecutando los siguientes comandos:
git checkout dev
git merge master
El resultado sería algo como esto:
--------- dev branch
/
--- Commit 1 ---- Commit 2 ---- Commit 3 -------------- master branch
Ahora decides trabajar en la característica de autenticación. Para trabajar en la función de autenticación, creas otra rama basada en la rama dev
y decides llamarla auth
. Así es como se ve la estructura de recompra:
------ auth branch
/
--------- dev branch
/
--- Commit 1 ---- Commit 2 ---- Commit 3 -------------- master branch
Si tuviera que confirmar algún cambio en la rama de auth
, fusionarlos con la rama dev
sería trivial porque está actualizado con la rama dev
. Ahora, mientras trabajaba en la función de autenticación, uno de los desarrolladores terminó de codificar la función de resaltado de sintaxis y decidió fusionarla con la rama dev
. El repositorio se ve así ahora:
--- Commit 5 --- auth branch
/
--- Commit 4 ------ dev branch
/
--- Commit 1 ---- Commit 2 ---- Commit 3 ------------------------ master branch
Tu rama, en terminología de Git, ahora es un compromiso detrás de la rama dev
. Esto significa que no puede simplemente fusionar las dos ramas: debe actualizar su rama de auth
con la rama dev
. Esto se puede hacer con git merge
!
La fusión de la rama auth
con la rama dev
, o la rama dev
con la rama master
es sencilla y hace lo que se espera, pero la combinación a la inversa tiene sus propias idiosincrasias que no son intuitivas a primera vista. Puedo balbucear al respecto, o puedo mostrarte otro gran diagrama de lo que sucedería si fusionaras la rama dev
con la rama auth
en este momento:
--- Commit 5 ----------- auth branch
/ /
--- Commit 4 -------------- dev branch
/
--- Commit 1 ---- Commit 2 ---- Commit 3 -------------------------------- master branch
¿Ves lo que hice ahí? Mire el diagrama por un segundo y trate de entender lo que está sucediendo aquí antes de continuar. Básicamente, hiciste otra confirmación a la rama de auth
con las confirmaciones en la rama dev
incluida. Pero eso está bien, ¿verdad? Después de todo, al final del día quería actualizar mi sucursal de auth
con la de dev
, ¿y ahora está actualizada? Sí. Pero déjame mostrarte un diagrama para ilustrar explícitamente lo que implica el otro diagrama: Tu rama de auth
ahora se ve así:
--- Commit 5 ------- Commit 4 ------- auth branch
/ /
------ Commit 4 --- --------------------- dev branch
¿Vealo Ahora? Copiaste el commit sobre. Si fueras a unirte a la rama dev
ahora, se vería algo así:
--- Commit 5 ------- Commit 4 -------------------------------------- auth branch
/ / \
------- Commit 4 ----------------------- Commit 5 ---- Commit 4 -------- dev branch
¡Has fusionado el mismo commit dos veces! Por supuesto, esto no tendrá repercusiones para su propio código, pero si un buen día decide ver sus git logs
, inmediatamente se dará cuenta de lo sucio que está su historial de git, con algunos confirmaciones una y otra vez. Si quisiera volver a un compromiso, sería muy difícil decidir a qué compromiso volver.
Es preferible que utilices Git-Rebase .