Fusionando 2 sucursales juntas en GIT


131

Acabo de comenzar a usar GIT y creo que es maravilloso, sin embargo, estoy un poco confundido sobre lo que hace el mergecomando.

Digamos que tenemos un proyecto de trabajo en la rama "A".

Voy a casa y hago cambios en esta rama y la guardo como "B". Otro programador realiza cambios en "A" y lo guarda como "C".

¿Hay alguna manera de fusionar las dos ramas "B" y "C" juntas, y luego confirmar los cambios como una nueva rama, decir "D"?

¿O me estoy perdiendo el punto de 'fusión'?


no es necesario 'guardar cambios' en otra rama. trabajar una A y luego fusionar esas A diferentes juntas
— knittl

No te sigo. A estaría en mi computadora local, dev1 tendría una copia de A en su computadora y dev2 tiene una copia de A en su computadora. Ambos desarrolladores realizan cambios, ¿cómo combino estos cambios?
— dotty

ver < kernel.org/pub/software/scm/git/docs/git-pull.html >. los desarrolladores probablemente necesiten empujar / cargar su repositorio en algún lugar primero
— knittl

Respuestas:


196

merge se usa para unir dos (o más) ramas juntas.

un pequeño ejemplo:

# on branch A:
# create new branch B
$ git checkout -b B
# hack hack
$ git commit -am "commit on branch B"

# create new branch C from A
$ git checkout -b C A
# hack hack
$ git commit -am "commit on branch C"

# go back to branch A
$ git checkout A
# hack hack
$ git commit -am "commit on branch A"

así que ahora hay tres ramas separadas (a saber, AB y C) con diferentes cabezas

para que los cambios de B y C vuelvan a A, desproteja A (ya realizado en este ejemplo) y luego use el comando de combinación:

# create an octopus merge
$ git merge B C

su historial se verá así:

…-o-o-x-------A
      |\     /|
      | B---/ |
       \     /
        C---/

si desea fusionarse a través de los bordes del repositorio / computadora, eche un vistazo al git pullcomando, por ejemplo, desde la PC con la rama A (este ejemplo creará dos nuevas confirmaciones):

# pull branch B
$ git pull ssh://host/… B
# pull branch C
$ git pull ssh://host/… C

eso significa que ambas ramas cambiaron la misma pieza de código. arreglar los conflitcs, git add conflicting_filesy luegogit commit
— knittl

Digamos que el archivo en A contenía la palabra "hola", la A lo modificó a "HOLA" y B lo modificó a "Hola mundo". ¿Cuál sería el resultado de fusionar estos archivos?
— dotty

Vaya, quiero decir que B lo modificó y C lo modificó.
— dotty

tenga cuidado con la palabra 'enmendar' que significa algo diferente en git (cambio de confirmaciones existentes). cambiar un archivo 'hola' a 'HOLA' en un lado y 'Hola mundo' en el otro lado dará como resultado un conflicto de fusión
— knittl

19
@dotty: Si bien git a menudo parece mágico, en realidad no puede leer tu mente: si dos ramas hacen dos cambios diferentes en el mismo contenido, solo un humano puede descubrir cómo reconciliarlos. Eso es lo que es un conflicto de fusión.
— Cascabel

47

Si desea fusionar cambios en SubBranch a MainBranch

  1. deberías estar en MainBranch git checkout MainBranch
  2. luego ejecute el comando de fusión git merge SubBranch

2
@luckytaxi: De acuerdo, a veces menos es más
— Marcelo Scofano

¿Puedo deshacer esto?
— Yohanelly

0

Caso: si necesita ignorar la confirmación de fusión creada por defecto , siga estos pasos.

Digamos, una nueva rama de características se extrae del maestro que ya tiene 2 confirmaciones,

  • "Agregado A", "Agregado B"

Checkout a new feature_branch

  • "Agregado C", "Agregado D"

La rama de características luego agrega dos confirmaciones ->

  • "Agregado E", "Agregado F"

ingrese la descripción de la imagen aquí

Ahora, si desea fusionar los cambios de feature_branch a master, git merge feature_branchsiéntese en el master.

Esto agregará todos los commits en la rama maestra (4 en master + 2 en feature_branch = total 6) + un commit de fusión adicional similar a 'Merge branch 'feature_branch' 'a medida que el master se diverge .

Si realmente necesita ignorar estas confirmaciones (las realizadas en FB) y agregar todos los cambios realizados en feature_branch como una única confirmación como 'Integrated feature branch changes into master' , Ejecutargit merge feature_merge --no-commit .

Con --no-commit, realiza la fusión y se detiene justo antes de crear una confirmación de fusión. Tendremos todos los cambios agregados en la rama de características ahora en master y tendremos la oportunidad de crear una nueva confirmación como nuestra.

Lea aquí para más información: https://git-scm.com/docs/git-merge

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.