2011-03-13 20 views
21

Tengo 2 repositorios locales llamados "desarrollar" y "maestro"; son similares. En el servidor de mi empresa hay 1 "principal" de recompra (de producción) y varias ramas que fueron hechas por otros desarrolladores:Fusionando ramas múltiples con git

 
$ git branch -a 
* develop 
    master 
    remotes/origin/HEAD -> origin/master 
    remotes/origin/some-test 
    remotes/origin/feature1 
    remotes/origin/feature2 
    remotes/origin/master 

Cómo puedo fusionar I remotes/origin/feature1 y remotes/origin/feature2 en mi local de repo "maestro", copia que todos en " desarrollar "y comenzar a trabajar con el código real en mi repositorio de" desarrollo "?

Respuesta

31
  1. git checkout master
  2. git pull origin feature1 feature2
  3. git checkout develop
  4. git pull . master (o tal vez git rebase ./master)

El primer comando cambia su rama actual al master.

El segundo comando realiza cambios desde las ramas feature1 y feature2 remotas. Esta es una fusión de "pulpo" porque fusiona más de 2 ramas. También podría hacer dos fusiones normales si lo prefiere.

El tercer comando lo regresa a su rama develop.

El cuarto comando extrae los cambios del master local al develop.

Espero que ayude.

EDITAR: Tenga en cuenta que git pull hará automáticamente un fetch por lo que no necesita hacerlo manualmente. Es prácticamente equivalente a git fetch seguido de git merge.

+1

¿Cuál es la diferencia resultante entre este método y solo el uso de dos fusiones? ¿Obtienes un compromiso de fusión única con las tres ramas como padres? Además, esto presumiblemente fallará si las fusiones no son limpias, ¿verdad? Por lo tanto, una función 'git merge feature1 feature2' podría ser necesaria de todos modos. – naught101

+0

Para responder a mi propia pregunta, se obtiene una única confirmación con el encabezado de cada rama como padre (incluida la rama que se fusiona). si una o más de las fusiones individuales se fusionarían rápidamente, entonces no se fusionaría el jefe de la sucursal como padre, porque ya está en el historial de una de las sucursales. – naught101

+13

Si hay un conflicto, la fusión simplemente fallará con el mensaje 'No debería estar haciendo un pulpo'. Este es claramente uno de los mejores mensajes de error de todos los tiempos. – naught101

9

me gustaría simplemente "ir a buscar" todos de origen:

git fetch origin 

ahora que está en tu repositorio puede combinar las ramas en master:

git checkout master 

git merge origin/feature1 

git merge origin/feature2 

ahora puede combinar principal en el desarrollo

git checkout develop 
git merge master 

Si va a volver a comprometerse con el origen, entonces configuraría una sucursal de seguimiento local para que pueda tener acceso local y empujar directamente al origen:

git branch --track origin/feature1 feature1