Union de 2 ramas dev's en git

Iniciado por fabiru23, 26 Julio 2021, 23:02 PM

0 Miembros y 1 Visitante están viendo este tema.

fabiru23

Buen día!
Una pregunta sobre git...

Alguien sabe si se pueden unir una rama "dev" con otra rama "dev2"?
He unido una rama dev con master, pero al tratar de unir una rama dev con otra dev2 no me da el resultado no se si esto es posible, alguien que me saque de la duda.

Gracias!!

MinusFour

#1
Si, puedes unir las ramas que quieras con git merge.

Código (bash) [Seleccionar]
git checkout dev
git merge dev2


Y más adelante puedes unirla de vuelta a master

Código (bash) [Seleccionar]
git checkout master
git merge dev


O también puedes hacer un merge de las 3 ramas:

Código (bash) [Seleccionar]
git checkout master
git merge dev dev2


(esto es si no quieres hacer el merge de dev2 a dev y luego de dev a master)

fabiru23

Gracias!! voy a intentar lo que pasa es que no me salen los cambios....


Tengo la rama master con un archivo
-Hago una rama "dev" para agregar una funcionalidad (archivo.js) y hago commit-1
-Hago otro commit en la rama dev (commit-2) deonde se elimino (archivo.js)
Pero resulta que me regreso al comit-1 porque siempre si quiero (archivo.js), y al momento de regresar hago un checkout commit-1, y hago un commit (commit-3)pero este commit head no esta ni en "master" ni en "dev" si no en una rama aparte, lo que hago es checkout -b "dev2" para que crear una rama nueva y el commit que hice (commit-3) quede ligado a la rama dev-2.
tons una vez que ya tengo los cambios (archivo.js) en dev-2(commit-3) me cambio a rama "dev" que quedo en (commit-2) donde no esta el archivo, y  quiero hacer merge con rama "dev2" donde si esta el archivo (archivo.js)
y no me dice que esta actualizado pero no esta mi archivo

Espero y me de a entender jejeje.

MinusFour

Usar git checkout para regresar al commit anterior y seguir realizando commits desde ese punto no es la mejor de las ideas.

Para eso existe git reset.

1. Commit en Master (A).
2. Nueva rama dev.
3. Commit en dev (B) (archivo.js).
4. Commit en dev (C) (borras archivo.js).
5. git reset HEAD^ --hard o git reset B --hard
6. Ahora estás en B.

Y ahora puedes seguir haciendo commits.

Como tu lo estás haciendo, los cambios entre dev2 y dev borran el archivo.

En tu ejemplo, tienes otro commit (D) que hace otros cambios. De:


B--C (borraste archivo)
\
  D (otros cambios)


Si haces una unión de C y D, vas a crear un merge commit (E).


B - C
\   \
  D - E


Donde se agregan los cambios de de C y D (es un merge de 3 puntos), respectivamente.  Git ve que eliminaste un archivo en C y no se que hayas hecho en D pero también lo ve.

Entonces los cambios los agrega y el resultado es o un merge conflict (porque editaste el archivo en D y git no sabe que cambios usar, si los de D o los de C) o tu archivo acaba borrado (porque esos son los cambios introducidos por C).

No tienes porque hacer git merge en este caso. Simplemente, olvidate del commit que existe. Si has hecho lo del git checkout forza la cabeza de la rama dev a que apunte al commit D. Lo puedes hacer haciendo:

Código (bash) [Seleccionar]
git branch -f dev estando sobre el commit D o
Código (bash) [Seleccionar]
git branch -f dev D para ser más especifico.